Я думаю, что мой вопрос больше связан с SQL, чем с Laravel или его ORM, но у меня возникла проблема при программировании на Laravel, поэтому я отметил его в вопросе.
Моя проблемаследующим образом, у меня есть следующая модель (извините за Spanglish):
- У меня есть таблица пользователей, здесь ничего особенного,
- Затем таблицы
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