【问题标题】:Laravel: Save Method not workingLaravel:保存方法不起作用
【发布时间】:2018-09-15 11:43:09
【问题描述】:

我正在尝试使用此方法 save 保存/更新数据,但它不起作用,它说参数没有默认值,但我将其作为我想要的一部分发送插入/更新。这是我的代码

public function store(Request $request)
    {
        $producto_nombre = Producto_nombre::where('codigo', $request->codigo)->first();
        $reglas = [];
        //Comprobar unique en update
        if (isset($producto_nombre)) {
            $reglas = [
                'codigo' => [
                    'required',
                    Rule::unique('producto_nombre')->ignore($producto_nombre->id),
                ],
                'descripcion' => 'required'];
        } else {
            $reglas = ['descripcion' => 'required', 'codigo' => 'required|unique:producto_nombre'];
        }
        $validator = Validator::make($request->all(), $reglas);
        if ($validator->fails()) {
            return response()->json(array('errors' => $validator->getMessageBag()->toArray()));
        } else {
            $collection = $request->all();
            $this->agregarProducto($collection);

        }
    }


    public function agregarProducto($collection)
    {
        $producto_nombre = Producto_nombre::where('codigo', 
                           $collection['codigo'])->first();
        $empresa = Empresa::where('id', $collection['empresa_id'])->first();
        //Si esta vacio crea una nuevo
        if (empty($producto_nombre)) {
            $producto_nombre = new Producto_nombre();
        }

        $collection['iva_id'] = Iva::where('actual', 1)->first()->id;
//        dd($collection);
//        $producto_nombre->iva_id = Iva::where('actual', 1)->first()->id;
        $producto_nombre->save($collection);
        $producto = $empresa->productos()->where('producto_nombre_id',                 
                     $producto_nombre->id)->first();
        // Si esta vacio crea nuevo producto
        if (empty($producto)) {
            $producto = new Producto();
            $this->crearProductoSucursales($producto_nombre->id, 
                                           $collection['empresa_id']);
        }
        $producto->producto_nombre_id = $producto_nombre->id;
//            TODO editar en transferencias y compras en 0 maximo y minimo
        $producto->stock_maximo = $collection['stock_maximo'];
        $producto->stock_minimo = $collection['stock_minimo'];
        $producto->descuento = $collection['descuento'];
        $producto->save();
        $empresa->productos()->syncWithoutDetaching($producto->id);
    }

这就是 $collection 所拥有的

array:13 [
  "codigo" => "prueba"
  "descripcion" => "prueba"
  "con_iva" => "1"
  "desglose" => "0"
  "costo_actual" => "12"
  "precio" => "19.64"
  "descuento" => "12"
  "costo_promedio" => "0"
  "maximo" => "45"
  "minimo" => "2"
  "linea" => "2"
  "seccion" => "2"
  "empresa_id" => "2"
]

我创建了 agregarProducto 方法,因为我想在其他控制器中重用它

更新

错误提示:

"message": "SQLSTATE[HY000]: 一般错误: 1364 字段 'codigo' 没有默认值 (SQL: insert into producto_nombre(updated_at, created_at) values (2018-04-05 10:09:28, 2018-04-05 10:09:28))",

【问题讨论】:

  • 上传错误内容
  • 当然"message": "SQLSTATE[HY000]: General error: 1364 Field 'codigo' doesn't have a default value (SQL: insert into producto_nombre` (updated_at, created_at) 值 (2018-04-05 10:09:28, 2018-04-05 10:09:28))", `
  • 好像codigo 被设置为not null 而你没有给它分配任何东西。
  • 你设置Producto_nombre::$fillable了吗?
  • 是的,它不能为空,但我将它发送到我的数组中,这是错误的吗?,我在$producto_nombre->codigo = $collection['codigo']; 之前做过类似的事情并且它正在工作,但现在我想更新如果产品已经存在则字段

标签: php laravel


【解决方案1】:

去课堂Producto_nombre并添加:

class Producto_nombre
{
...
    protected $fillable = ['codigo'];
...

然后替换

$producto_nombre->save($collection);

$producto_nombre->fill($collection);
$producto_nombre->save();

save() 方法的参数适用于禁用时间戳和其他选项等。在您的情况下,您正在尝试用数组中的数据填充对象,因此您必须使用 fill($collection) 或者,如果它是一个新寄存器,您可以使用 create($collection)

【讨论】:

  • 我已经这样做了,所以我不明白 laravel 想要什么哈哈
  • 正如stackoverflow.com/users/1580044/felippe-duarte 所指出的,您需要在模型中使用可填充属性才能使此分配工作$producto_nombre->fill($collection);。如果你想保存描述字段,那么也包括它。更多信息laravel.com/docs/5.6/eloquent#mass-assignment
  • 非常感谢它的工作,我正在使用 save 方法创建一个新的寄存器,如果存在则更新
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 2018-04-10
相关资源
最近更新 更多