【发布时间】: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 intoproducto_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'];之前做过类似的事情并且它正在工作,但现在我想更新如果产品已经存在则字段