Laravel updateOrCreate только если тип столбца равен цвету

#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
    ]);
}