Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть пользователи (User), которые могут создавать организации (Organizatoin) - поля name, inn, kpp.
Для формы и записи есть два маршрута
Route::get('pa/organization/add', 'OrganizationController@add')->name('organization-add');
Route::post('pa/organization/add', 'OrganizationController@store')->name('organization-store');
Внутри метода store - простенький валидатор
$validator = $this->validate($request,[
'inn' => 'required|min:10|max:12',
'kpp' => 'max:9',
'name' => 'required|min:5'
]);
После которого - создание сущности Organizatoin (также проверяется, нет ли уже такой организации по inn+kpp).
Теперь задача - привязать организации к пользователю, который ее создает.
Добавил таблицу UserOrganizations (id, id_user, id_organization), а также составной индекс id_user + id_organization
Перед записью проверяем наличие такой записи
$user_org = UserOrganizations::select()->where('user_id', Auth::id())->where('organization_id', $org->id)->first();
if ($user_org!==null){
//уже есть
}
При этом нужно добавить ошибку в стандартный массив errors и сделать redirect, чтобы на предыдущей странице выдать ошибку "К вам уже привязана эта организация" (через @errors)
Как это сделать? Создавать UserOrganizationController и там создавать свою валидацию, или можно как то попроще через стандартный validate? Или вообще не через validate можно добавить произвольный error?
Не в сети
Можно сделать так. На предыдущей странице вставляешь код
@if(session('status'))
<div class="alert alert-success alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
{{session('status')}}
</div>
@endif
В контроллере
if ($user_org!==null){
return redirect()->back()->with('status', __('message.error'));
}
В папке lang делаешь папку ru, в ней файл - message. В нем
return [
'error' => 'Выводимый текст',
];
Не в сети
Круто.
Сделал вот так, совсем просто получилось.
if ($user_org!==null){
return redirect()->back()->withErrors(['name' => 'У Вас в списке уже есть организация с таким ИНН, КПП'])->withInput();
}
Только кажется, что проверять предварительно через обращение к модели - немного костыльно
$user_org = UserOrganizations::select()->where('user_id', Auth::id())->where('organization_id', $org->id)->first();
Может есть способ в UserOrganizations (или еще где) реализовать валидацию на составной индекс, а затем внутри метода store (OrganizationController) использовать этот валидатор?
Не в сети
Можешь проверять на наличие в БД так
$validator = $this->validate($request,[
'$user_org' => 'required|unique:(таблица в БД)',
]);
Не в сети
Страницы 1