#php #mysql #laravel
#php #mysql #laravel
Вопрос:
Я создаю laravel
-приложение, в котором пользователи, помимо прочего, могут вводить свои образования. Чтобы избежать дублирования записей, я добавил это в свой контроллер:
$user_education = UserEducation::where(['id' => $id, "user_id" => $request->user()->id])->first();
if ($user_education->where(["education_id" => $validated['education_id']])->first() != null) {
$user_education->education_id = request()->education_id;
$user_education->education_level_id = $validated['education_level_id'];
$user_education->is_current = request()->is_current;
$user_education->start_date = $start_date;
$user_education->end_date = $end_date;
$user_education->school = $validated['school'];
$user_education->description = request()->description;
$user_education->save();
} else {
return response(['errors' => ["education" => ["Education already created."]]], 400);
}
но, похоже, это не работает на 100%. Когда я пытаюсь обновить существующую запись, данные обновляются правильно, но все равно я получаю сообщение об ошибке «Образование уже создано»
Что я здесь делаю не так?
Комментарии:
1. Что вы пробовали для устранения проблемы? Вы должны начать с проверки, когда эти условия выполняются, как ожидалось, а когда нет
Ответ №1:
Я думаю, что есть более простой способ выполнить то, что вы хотите, используя Laravel Request class
, где вы можете определить свою логику проверки. Итак, все, что вам нужно сделать, это создать новый Request
:
php artisan make:request UserEducation
Затем, среди прочих правил, добавьте уникальное правило, которое предотвращает дублирование записей в базе данных:
public function authorize()
{
return true; //Set this to true, or write your own logic to determine if user is authorized to submit this request
}
public function rules()
{
return [
'education_id' => 'unique:table_name, column_name',
];
}
Это предотвратит ввод дубликатов education_id
в столбец, который вы указали выше.
Все, что вам нужно сделать сейчас, это включить этот новый запрос в ваш метод контроллера:
public function update(UserEducation $request){
//Your logic, don't need an if-else statement, just your save() logic.
}
Если у вас есть какие-либо вопросы или проблемы с решением, которое я предоставил, дайте мне знать. Вы можете прочитать больше в официальной документации.