#php #laravel
#php #laravel
Вопрос:
У меня проблема, мне нужна запись обновления, если только в запросе я получаю значение == цвет. Как я могу это сделать? У меня есть код:
$shop->services()->updateOrCreate([
'user_id' => $user->id,
'shop_id' => $shop->id,
'service_data' => $request->service_type == 'color' ? : false, //do update for record only if service_data == 'color'
], [
'price' => $price,
'valid_until' => Carbon::now()->addDays($request->valid_until),
'service_data' => $request->service_data == 'color' ?: false, //do update for record only if service_data == 'color'
]);
Как я могу это сделать?
Комментарии:
1. Разве это не имело бы больше смысла в качестве оператора if вокруг вашего
updateOrCreate
вызова? Что-то вродеif($request->service_data == "color"){ $shop->services()->updateOrCreate(...); }
Ответ №1:
Вы могли бы использовать when
:
$shop->services()->when($request->input('service_data', false) === 'color', function($query) {
return $query->update([
'user_id' => $user->id,
'shop_id' => $shop->id,
'service_data' => 'color'
], [
'price' => $price,
'valid_until' => Carbon::now()->addDays($request->valid_until),
'service_data' => 'color'
]);
})
->when($request->input('service_data', false) !== 'color', function($query) {
return $query->create([
'user_id' => $user->id,
'shop_id' => $shop->id,
'service_data' => false
], [
'price' => $price,
'valid_until' => Carbon::now()->addDays($request->valid_until),
'service_data' => false
]);
});
Ответ №2:
Принцип ПОЦЕЛУЯ -> Держите его простым и глупым
if ($request->service_data == 'color') {
$shop->services()->updateOrCreate([
'user_id' => $user->id,
'shop_id' => $shop->id,
'service_data' => $request->service_type
'price' => $price,
'valid_until' => Carbon::now()->addDays($request->valid_until),
'service_data' => $request->service_data
]);
}