I have a product table which has price, name, stock etc. and color_products table which has color_id, product_id. I want to store a product to the database with selected colors so far I’m getting an error Invalid argument supplied for foreach(). How can I fix this?
Controller
$formInput=$request->all(); //If I do dd($formInput) I see all data
$product = product::create(array_merge($formInput, [
'user_id' => Auth::user()->id
]));
// Insert color to the database
$store_color = [];
$colors = $request->color_id;
foreach ($colors as $color) {
$ouzColor = $color->save;
$store_color[] = [
'product_id' => $product->id,
'color_id' => $ouzColor
];
}
ColorProduct::insert($store_color);
Blade file
<select multiple name="color_id" id="color">
<option value=""> --Select Colors -- </option>
@foreach($colors as $color)
<option value="{{ $color->id }}" >{{$color->name}}</option>
@endforeach
</select>
Advertisement
Answer
try to rename your select field to be something like that <select multiple name="color_id[]" id="color">
let’s take it a step by a step.
$product = Product::create([
'field 1' => $request->field1,
'filed 2' => $request->field2,
'user_id' => Auth::user()->id,
]);
$store_color = [];
foreach ($request->color_id as $index=>$color) {
$store_color[$index] = [
'product_id' => $product->id,
'color_id' => $color,
];
}
ColorProduct::insert($store_color);
of course, you need to change filed1 and 2 with its real names and value