php - Laravel 查询生成器加入 LIKE

标签 php laravel

我正在尝试使用 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/

相关文章:

php - Symfony 的 DomCrawler

PHP:如何用逗号分解字符串,而不是引号内的逗号?

php - Laravel Eloquent 连接不相关的表?

json - Laravel eloquent JSON 字段,选择属性会产生额外的双引号

mysql - 如何在 Laravel Eloquent 方法或 SQL 中选择具有相同列条件的行

php - 如何在 laravel pivot 模型上调用函数

php - 如何通过 PHP 发布到 Google Plus?

php - jquery 使用 javascript 或 php 发布到 php 页面

php - 使用 Laravel Scout 和 Algolia 的多语言索引

php - 根据大小旋转文本文件