Имея против Где в SQL, используя ORM в Laravel - PullRequest
0 голосов
/ 24 июня 2019

Я думаю, что мой вопрос больше связан с SQL, чем с Laravel или его ORM, но у меня возникла проблема при программировании на Laravel, поэтому я отметил его в вопросе.

Моя проблемаследующим образом, у меня есть следующая модель (извините за Spanglish):

enter image description here

  • У меня есть таблица пользователей, здесь ничего особенного,
  • Затем таблицы juegos (игры), в нем есть столбец jornada (как и неделя, чтобы узнать, в какие игры играют на определенной неделе)
  • И, наконец, pronosticos (кто, по словам пользователя, выиграет, хранится в столбце diferencia)

Поэтому я хочу создать форму, в которой пользователь может сделать свою ставку.В основном, эта форма будет получать свои данные из таблицы pronosticos, например:

$juegos = Juego::where('jornada', $jor)
                 -> orderBy('expira')
                 -> get();

Это создает то, что я хочу, набор моделей, которые я могу повторять, чтобы показать все игры для данной йорнады (неделя).

Теперь, если пользователь уже сделал свою ставку, я хочу также привести значения оценок, на которые пользователь делает ставку, с запросом, поэтому я подумал, что могу использовать что-то вроде:

$juegos = Juego::where('jornada', $jor)
                  -> leftJoin('pronosticos', 'juegos.id', '=', 'pronosticos.juego_id')
                  -> addSelect(['pronosticos.user_id', 'juegos.id', 'expira', 'visitante', 'local', 'diferencia'])
                  -> having('pronosticos.user_id', $uid)
                  -> orderBy('expira')
                  -> get();

Теперь проблема в том, что он приносит пустой набор, и это совершенно очевидно, если пользователь сделал свою ставку, она будет работать, но если он этого не сделает, он отфильтрует все, давая пустойset.

Так что я думаю, что я не понимаю, как правильно иметь или где правильно работать.Может быть, я хочу сделать leftJoin не с таблицей pronosticos, а с таблицей pronosticos, уже отфильтрованной с помощью предложения where.

Возможно, я все делаю неправильно и должен выполнить командуоставил присоединиться к подвыбору?Если это так, я понятия не имею, как это сделать.

Или, может быть, мои ожидания находятся за пределами того, что можно сделать с SQL, и я могу вернуть два разных набора и обработать их в приложении?

РЕДАКТИРОВАТЬ Это запрос, который я хочу выразить в ORM Laravel:

SELECT * from juegos
    LEFT JOIN (SELECT * FROM pronosticos WHERE user_id=1) AS p 
    ON p.juego_id = juegos.id 
    WHERE jornada = 2 ORDER BY expira
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...