@PHPjedi

Как запретить дублирование записи в таблице?

Я немного поискал в просторах интернета, в документации искал, но нужного не нашел.

Я написал возможность подписки на категории методом AJAX.

Отправляю id на сервер, а там уже в таблицу записывается user_id и category_id.

Дело в том, что если по какой то причине отправиться два раза запрос AJAX, то в таблице будет записано два раза одно и тоже. И это очень плохо.

Пример:

if ($request->post('category_id')) {

            $user_category = new UserCategory();

            $user_category->user_id = Auth::user()['id'];
            $user_category->category_id = $request->post('category_id');

            if ($user_category->save()) {
                return response()->json(['response' => 'Category success']);
            }
        }


Как я могу проверить сначала на существовании записи, и если её нет(точно такой же), то записывать новую запись ?

Прошу вас помочь в решении проблемки...

Заранее спасибо.
  • Вопрос задан
  • 238 просмотров
Решения вопроса 2
@Yan-s
Есть метод firstOrNew() пример из доки:
// Retrieve by name, or instantiate...
$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);

// Retrieve by name, or instantiate with the name and delayed attributes...
$flight = App\Flight::firstOrNew(
    ['name' => 'Flight 10'], ['delayed' => 1]
);

https://laravel.com/docs/5.6/eloquent#insert-updat...
Ответ написан
Комментировать
@Mysterion
$user_category = UserCategory::where('user_id', Auth::user()['id'])
    ->where('category_id', $request->post('category_id'))
    ->first();
if(!$userCategory) {
    $user_category = new UserCategory();
    $user_category->user_id = Auth::user()['id'];
    $user_category->category_id = $request->post('category_id');
    if ($user_category->save()) {
        return response()->json(['response' => 'Category success']);
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы