Как сделать запрос с условием с laravel? - PullRequest
0 голосов
/ 11 июля 2019

Привет, друзья! Мне нужна помощь, моя проблема в том, что мне нужно проверить, существуют ли определенные данные в избранной таблице, и их нельзя добавить снова, например, пользователь, который хочет добавить ранее зарегистрированную акцию, не позволяет ему добавить это снова. но условие, которое мне нужно, заключается в том, что если пользователь с user_id = 9 ввел рекламное объявление в таблицу избранного с promocion_id = 30, он не сможет повторно ввести этот promocion_id, но если другой пользователь с user_id = 13 захочет добавить тот же promocion_id = 30 тогда этот, если я могу мой стол favitos

$promocionid = request('promocion_id');
$userid = request('user_id');
if($query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get())
{
    return response()->json([$query,
        'message' => 'esta promocion ya ha sido agregada anteriormente'],422);
}else{
    $agregar = new PromocionesFavoritasUsers;
    $agregar->user_id = 13;
    $agregar->promocion_id = 30;
    $agregar->save();
    return response()->json([$agregar,
    'message' => 'Se agrego con exito esta promoción'],200);

}

где я положил числа, я помещу переменные $ promocion id и $ user id (я ставлю числа, чтобы попробовать с почтальоном), но я получаю только сообщение «это продвижение уже было добавлено ранее»], 422

Ответы [ 3 ]

0 голосов
/ 11 июля 2019

Вы в значительной степени поняли это правильно.Вы хотите проверить базу данных, чтобы увидеть, существует ли продвижение по двум параметрам, которые отправляются через объект $request.Если это так, не позволяйте сделать новую акцию.Как и сейчас, всегда будет возвращать 422, поскольку эти значения уже есть в базе данных, а коллекция будет истинным значением.

Во-первых, необходимо правильно получить переменные из $request:

public function whateverYourFunctionIsCalled(Request $request){
    $promocionid = $request->get('promocion_id');
    $userid = $request->get('user_id');
    // Etc
}

Затем в той же функции вызовите запрос так же, как вы:

$exists= PromocionesFavoritasUsers::where('user_id',$userid)->where('promocion_id',$promocionid )->first();

Проверьте, не было ли получено точное совпадение (не нулевое), иесли есть, не двигайтесь вперед:

if(isset($exists))
 {
      return response()->json([$query,
           'message' => 'esta promocion ya ha sido agregada anteriormente'],422);
  }else{ // Create a new promotion }
0 голосов
/ 11 июля 2019

Изменение

if($query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get())

до

if(PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->exists())

exists() возвращает TRUE, если какая-либо запись удовлетворяет условиям WHERE. В противном случае возвращается FALSE.

0 голосов
/ 11 июля 2019

Я подозреваю, что ваша проблема здесь ...

if($query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get())

Даже если результаты пустые, это условие все равно будет иметь значение true, поэтому вам, вероятно, стоит еще немного расширить.

$query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get()
if ($query->count() > 0) {
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...