我尝试使用此方法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 Field' codigo'没有默认值(SQL:insert into producto_nombre
(updated_at, created_at) values (2018-04-05 10:09:28, 2018-04-05 10:09:28))",
答案 0 :(得分:4)
转到课程Producto_nombre
并添加:
class Producto_nombre
{
...
protected $fillable = ['codigo'];
...
然后替换
$producto_nombre->save($collection);
与
$producto_nombre->fill($collection);
$producto_nombre->save();
方法save()
的参数适用于禁用时间戳和其他选项。在您的情况下,您尝试使用数组中的数据填充对象,因此您必须使用fill($collection)
,或者如果它是新的注册表,您可以使用create($collection)