#laravel #validation #updates
#ларавель #утверждение #Обновления
Вопрос:
У меня есть 2 таблицы с именами area_managers
и shopkeepers
. Я хочу validate email
сделать это во area_managers
время обновления таким образом, чтобы оно не совпадало с электронной почтой shopkeepers
и area_managers
таблицей. Я попробовал следующий способ, но он даже не позволяет использовать существующий адрес электронной почты соответствующего пользователя.
public function update(Request $request, AreaManager $areaManager) { $request-gt;validate([ 'email'=gt;'required|email|unique:shopkeepers,email|unique:area_managers,email,'.$areaManager-gt;id, ]); $areaManager-gt; email = $request-gt;email; $areaManager-gt;update(); return redirect()-gt;route('area_manager.edit',$areaManager-gt;id); }
Комментарии:
1. Добро пожаловать в SO … вам придется игнорировать запись текущего пользователя из уникального правила, в документах объясняется, как это сделать для этого правила
2. Итак, вам нужно проверить уникальность при обновлении, верно ?
3. МанойКиран, да. проверьте уникальность из 2 таблиц во время обновления.
4. Похоже, это должно сработать. Что такое
$areaManager
? Включите весь соответствующий код и покажите, где находится этот код. Метод контроллера, я полагаю?
Ответ №1:
Быстрая проверка может быть чем-то вроде этого:
$checkAreaManagers = DB::table('area_managers')-gt;where('email', '=', $request-gt;email)-gt;first(); $checkShopkeepers = DB::table('shopkeepers')-gt;where('email', '=', $request-gt;email)-gt;first(); if ($checkAreaManagers === null || $checkShopkeepers === null) { // Proceed with the update $areaManager-gt;email = $request-gt;email; $areaManager-gt;save(); } if ($checkAreaManagers !== null || $checkShopkeepers !== null) { // Cancel the update (Your logic here) dd('Duplicate found'); }
Ответ №2:
вы должны создать роль с помощью этой команды:
php ремесленник делает:имя роли правила
затем в методе проходов задайте свой запрос, а затем используйте в валидаторе