Laravel 使用相等运算符查询 MySQL JSON 列

Posted

技术标签:

【中文标题】Laravel 使用相等运算符查询 MySQL JSON 列【英文标题】:Laravel query MySQL JSON column using equal operator 【发布时间】:2016-07-14 11:06:15 【问题描述】:

我正在尝试查询包含 JSON 列的 mysql 数据库表。

在 MySQL 中运行以下查询

mysql> select members from `conversations` where `members` = CAST('[1,2,3]' AS JSON) limit 3;

我可以从 mysql 控制台看到结果。

+-----------+
| members   |
+-----------+
| [1, 2, 3] |
| [1, 2, 3] |
| [1, 2, 3] |
+-----------+

但是,当我使用 Laravel QueryBuilder 构建此查询时。它会引发语法错误。

Laravel 代码(在控制器内):

$memberList = $request->input('members');
DB::table("conversations")->where('members', '=', DB::raw('CAST(\''.$memberList.'\'AS JSON'))->get();

错误信息:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (SQL: select * from `conversations` where `members` = CAST('[1,2,3]'AS JSON)

你能帮我看看我哪里做错了吗?

【问题讨论】:

试试这个:DB::raw('CAST('.$memberList.' AS JSON') 试过了,没有运气.. 你可以这样做吗,dd($memberList) 来检查 $memberList 的值 @geckob 好吧,我想你可以从错误输出中看到。它只是[1,2,3] @aldrin27 是的,我输入了 'members':[1,2,3];在获取请求中。 【参考方案1】:

首先您必须将$memberlist 转换为字符串。

$memberList = $request->input('members');
$memberListString = '[' . implode(",", $memberlist) . ']';

然后就可以使用了;

DB::table("conversations")
    ->whereRaw("members = CAST('".$memberListString."' AS JSON)")->get();

我相信它会起作用的。

【讨论】:

以上是关于Laravel 使用相等运算符查询 MySQL JSON 列的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4,雄辩 - 语句和运算符之间

Mysql表连接查询

查询 Laravel Eloquent 多对多,其中所有 id 都相等

JAVA中关于相等运算符(兼容操作数)的查询

MySQL NULL 值处理

Laravel 查询或运算符优先级