Size: a a a

Laravel для начинающих

2020 January 27

AR

Ali Rymkhanov in Laravel для начинающих
Окаай)
источник

SG

Sergey Gerasimov in Laravel для начинающих
Ali Rymkhanov
Окаай)
И еще погугли getRouteKeyName
источник

SG

Sergey Gerasimov in Laravel для начинающих
Dmitry M
Как объединить Rule::requiredIf() и exists:tbl,col? Суть Есть 2 типа заказа, на доставку и на самовывоз (pickup, delivery), если выбран самовывоз - то обязательно должна быть выбрана торговая точка и она должна существовать в базе, если же выбрана доставка то торговую точку указывать не обязательно, я пишу так:

'shop_id' => [
   Rule::requiredId($request->input('order_type') === 'pickup'),
   'exists:shops,id'
]
Но в данном случае даже если order_type === 'delivery', то shop_id проверяется на exists, как этого избежать?
Использовать Rule::exists
источник

DM

Dmitry M in Laravel для начинающих
И что должно поменяться замени я 'exists:shop,id' на Rule::exists('shop', 'id')?
источник

SG

Sergey Gerasimov in Laravel для начинающих
Dmitry M
И что должно поменяться замени я 'exists:shop,id' на Rule::exists('shop', 'id')?
Rule::exists('shop', 'id')->where(...
источник

SG

Sergey Gerasimov in Laravel для начинающих
Ну можно же и документацию открыть ;)
источник

SG

Sergey Gerasimov in Laravel для начинающих
Dmitry M
И что должно поменяться замени я 'exists:shop,id' на Rule::exists('shop', 'id')?
источник

SG

Sergey Gerasimov in Laravel для начинающих
Не за что
источник

DM

Dmitry M in Laravel для начинающих
Sergey Gerasimov
Не за что
Я не нашёл там решения, доку я читаю
источник

SG

Sergey Gerasimov in Laravel для начинающих
Dmitry M
Я не нашёл там решения, доку я читаю
Вот прям по ссылке перешел?
источник

SG

Sergey Gerasimov in Laravel для начинающих
Dmitry M
Я не нашёл там решения, доку я читаю
источник

SG

Sergey Gerasimov in Laravel для начинающих
Validator::make($data, [
   'email' => [
       'required',
       Rule::exists('staff')->where(function ($query) {
           $query->where('account_id', 1);
       }),
   ],
]);
источник

SG

Sergey Gerasimov in Laravel для начинающих
Ну если это не подходит - 🤷‍♂️
источник

DM

Dmitry M in Laravel для начинающих
В данном случае тут явно прописан 'required', мне нужно что-бы exists брался в расчёт только если сработал requiredIf
источник

DM

Dmitry M in Laravel для начинающих
Хоть код и не рабочий, логика должна быть такой:

'shop_id' => Rule::requiredIf(function () use ($request) {
   if ($request->input('type') === 'pickup') {
       Rule::exists('shop', 'id');
                   
       return true;
   };

    return false;
})
источник

SG

Sergey Gerasimov in Laravel для начинающих
Dmitry M
Хоть код и не рабочий, логика должна быть такой:

'shop_id' => Rule::requiredIf(function () use ($request) {
   if ($request->input('type') === 'pickup') {
       Rule::exists('shop', 'id');
                   
       return true;
   };

    return false;
})
$request->input('order_type') === 'pickup' ? 'required|exists:tbl,col' : 'nullable'

Так сделайте пока
источник

SG

Sergey Gerasimov in Laravel для начинающих
Вообще плохо делать разную валидацию в зависимости от GET|POST параметра
источник

SG

Sergey Gerasimov in Laravel для начинающих
Dmitry M
Хоть код и не рабочий, логика должна быть такой:

'shop_id' => Rule::requiredIf(function () use ($request) {
   if ($request->input('type') === 'pickup') {
       Rule::exists('shop', 'id');
                   
       return true;
   };

    return false;
})
Возможно будет работать если 1-ый валидатор поставить как bail:
['bail', Rule::requiredIf(...), 'exists:tbl,col']
источник

DM

Dmitry M in Laravel для начинающих
Спасибо, взял пока первый способ, не подумал что-то сразу про тернарный оператор.
источник

DM

Dmitry M in Laravel для начинающих
Sergey Gerasimov
Вообще плохо делать разную валидацию в зависимости от GET|POST параметра
А как иначе если необходимость ввода одного параметра зависит от другого?) Хорошо когда форма строго определена, а в моём случае множество полей зависит от других
источник