Reputation: 48
I am new to Laravel, here my existing fields are getting updated but unable to insert a new row, when users checks for a new category it should be added as a new row in the database.
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required',
'shop_id' => 'required',
'sub_category_id' => 'sometimes|required|',
'is_visible' => 'required',
'is_active' => 'required',
]);
try {
$product = Product::find($id);
$product->name = $request->name;
$product->shop_id = $request->shop_id;
$product->is_visible = $request->is_visible;
$product->is_active = $request->is_active;
$product->save();
foreach($request->category_id as $key =>$v){
$data = array(
'product_id'=>$id,
'category_id'=> $v,
'sub_category_id'=>isset($request->sub_category_id [$key])?$request->sub_category_id [$key]:null,
'total_quantity'=>$request->total_quantity [$key],
'quantity_unit'=>$request->quantity_unit [$key]
);
$ewast = EwasteItem::where('product_id','=',$id)->where('category_id','=',$request->category_id [$key])->get();
if ($ewast) {
$ewasteitem = EwasteItem::where('product_id',$id)->where('category_id',$v);
$ewasteitem->update($data);
} else {
EwasteItem::insert($data);
}
}
return \Redirect::route('ewaste.index')->with('successMessage', 'Product Updated Successfully.');
} catch (ModelNotFoundException $e) {
return $e;
}
}
Upvotes: 0
Views: 1714
Reputation: 3240
Update the foreach loop as follow
foreach($request->category_id as $key =>$v) {
$data = array(
'product_id'=>$id,
'category_id'=> $v,
'sub_category_id'=>isset($request->sub_category_id [$key])?$request->sub_category_id [$key]:null,
'total_quantity'=>$request->total_quantity [$key],
'quantity_unit'=>$request->quantity_unit [$key]
);
$ewasteitem = App\EwasteItem::updateOrCreate(
['product_id' => $id, 'category_id' => $v],
$data
);
}
also, check that in your App\EwasteItem model have $fillable array and it has the element 'product_id'
protected $fillable = ['product_id', ...other_column_names];
Upvotes: 1