我正在尝试使用 Laravel 的查询生成器连接两个表,但是我似乎在使用查询生成器获取所需结果时遇到问题,但是我可以使用原始 SQL 语句非常简单地获取它。我只想返回在 tags
表的 tag
列中具有相应值的所有 mod 行。
Schema
--------------
mods
--------------
id - int - (primary key)
name - varchar
--------------
tags
--------------
id - int
modid - int - (primary key of its parent mod)
tag - varchar
有效的 SQL 查询
从 mod JOIN 标签中选择 * ON Tags.tag LIKE '%FPS%'
查询生成器
DB::table('mods')
->join('tags', function ($join) {
$join->on('tags.tag', 'like', '%FPS%');
})
->get();
目前,这告诉我:“on 子句”中存在未知列“%FPS%”
,但我不确定如何构建它。我打算添加更多 orOn
子句,并且希望在多个标签上获得结果,但首先我只想让单个标签正常工作。
感谢任何帮助。
最佳答案
SELECT * FROM mod JOIN tags ON tags.tag LIKE '%FPS%'
您的查询生成器拒绝生成此查询,因为它毫无意义!
为了正确工作,JOIN
子句需要比较两列是否相等——连接表的每一侧各有一列。不执行此操作的 JOIN
子句在功能上会“降级”为 WHERE
子句。在此查询的情况下,两个表最终交叉连接。
您可能想要的是:
SELECT * FROM mod
JOIN tags ON tags.modid = mod.id
WHERE tags.tag LIKE '%FPS%';
关于php - Laravel 查询生成器加入 LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44148187/