sql - 在 Laravel 中使用 ORM 在 SQL 中有 vs. Where
问题描述
我认为我的问题与 SQL 相关,而不是与 Laravel 或其 ORM 相关,但我在 Laravel 中编程时遇到了问题,所以这就是我在问题中标记它的原因。
我的问题如下,我有以下模型(对不起西班牙语):
- 我有用户表,这里没什么特别的,
- 然后是
juegos
(游戏)表,里面有一jornada
列(就像一周一样,知道在某一周玩了哪些游戏) - 最后是
pronosticos
(用户说谁会赢,存储在diferencia
列中)
所以我想制作一个用户可以下注的表格。基本上,这种形式将从 pronosticos 表中获取数据,如下所示:
$juegos = Juego::where('jornada', $jor)
-> orderBy('expira')
-> get();
这产生了我想要的模型集合,我可以对其进行迭代以显示给定 jornada(周)的所有游戏。
现在,如果用户已经下注,我还想通过查询带来用户下注的分数值,所以我想我可以使用类似的东西:
$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();
现在,问题是,它带来了一个空集,这很明显,如果用户下注,它会起作用,但如果他没有下注,它会过滤掉所有东西,给出空集。
所以我想我不清楚如何使拥有或在哪里正常工作。也许我想要的leftJoin
不是对pronosticos
表做一个,而是从pronosticos
已经用 where 子句过滤的表中做一个。
也许我做错了一切,应该对子选择进行 leftJoin 吗?如果是这样,我不知道该怎么做。
或者,也许我的期望超出了 SQL 所能做的范围,我可能会返回两个不同的集合,并在应用程序中处理它们?
编辑 这是我想在 Laravel 的 ORM 中表达的查询:
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
解决方案
推荐阅读
- iis - 将所有子域重定向到新域
- json - How to manually decode json data in swift 4
- javascript - 使用 Rollup.js v1 捆绑一个 React 组件库
- typescript - 如何确保 T['someDynamicField'] 是 K 类型
- android - MediatorLiveData 直接从 ViewModel 绑定到 View
- php - 使用 Imagick 加载 PDF 文件:ERR_CONNECTION_RESET
- datatables - 数据表不保留更新记录的页面
- javascript - 有没有更好的方法来减少多个 if 语句?
- html - 如何在用户将鼠标悬停在具有特定类的 div 上而不显示在其他类上时显示工具提示
- postgresql - 列类型不一致:字符变化和字符变化(30)