Log*_*gon 3 php mysql laravel eloquent laravel-eloquent
我在查询json列时遇到问题。
以前我的代码是
$query->whereIn('user', $users);
Run Code Online (Sandbox Code Playgroud)
现在,我已将db类型更改为JSON列,并尝试修改新版本的代码。
在RAW MYSQL中,这有效
JSON_CONTAINS(user, '"tom","Bill"')
Run Code Online (Sandbox Code Playgroud)
但是,当我把它用雄辩的/ php表示时,它总是失败或返回提示。在这里,我传入一个用户数组,以前使用的是在原始SQL中工作的WhereIn
$leads->whereRaw("JSON_CONTAINS(user, '"$users"')")
Run Code Online (Sandbox Code Playgroud)
任何想法如何使它在Laravel中工作,这样我就可以传递一个字符串数组,并根据包含字符串数组的json列查询它们。
我的Json Colum拥有这样的数据
["Paul", "Tom", "Bob"]
Run Code Online (Sandbox Code Playgroud)
MySQL需要JSON字符串:
$leads->whereRaw('JSON_CONTAINS(user, ?)', [json_encode($users)])
Run Code Online (Sandbox Code Playgroud)
在Laravel 5.6.24中,您可以使用whereJsonContains()
:
$leads->whereJsonContains('user', $users)
Run Code Online (Sandbox Code Playgroud)
如果$users
是名称数组,那么您应该迭代它并添加orWhereRaw
条件,请注意orWhereRaw可以接受参数数组:
$users = ["Tom", "Bob"];
foreach( $users as $user) {
$leads->orWhereRaw("JSON_CONTAINS(user, ?)", [$user]);
}
$leads = $leads->get();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5321 次 |
最近记录: |