Laravel как проверить и избежать дублирования записей в контроллере

#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.
} 
  

Если у вас есть какие-либо вопросы или проблемы с решением, которое я предоставил, дайте мне знать. Вы можете прочитать больше в официальной документации.