I want to use updateOrCreate in order to prevent duplicate I have stores and need to store for every store its working hour (days, open time, close time, available)
Day Available Open Close
Monday [checkbox] [input] [input]
Tuesday [checkbox] [input] [input]
Wednesday [checkbox] [input] [input]
but I still get duplicate when inserting new values
Model:
protected $table = 'storedays'; protected $fillable = ['storeinfo_id', 'day_id','open_time','close_time','available']; protected $primaryKey = 'id';
Controller:
public function store(Request $request)
{
$store_id=$request->storeinfo_id;
$open_time = $request->input('open_time');
$close_time = $request->input('close_time');
$available=$request->input('available');
foreach ($request->input('day_id') as $key => $value) {
if ( ! isset($available[$key])) {
$available[$key] = 0;
}
else
{
$available[$key] = 1;
}
Storeday::updateOrCreate([
'storeinfo_id' => $store_id,
'day_id' => $value,
'open_time' => $open_time[$key],
'close_time' => $close_time[$key],
'available' => $available[$key],
]);
}
return response()->json(['data' => trans('message.success')]);
}
Advertisement
Answer
updateOrCreate function requires 2 params, match conditions and extra values. You need to change it to following:
Storeday::updateOrCreate([
'storeinfo_id' => $store_id,
'day_id' => $value,
],[
'open_time' => $open_time[$key],
'close_time' => $close_time[$key],
'available' => $available[$key],
]);
What will the line do?
First it will look if there is an entry in table for the store id and day id. If not, it will create a new row.
You can learn more about the updateOrCreate function here.