laravel雄辩的查询json列在哪里?

vaj7vani  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(360)

查询json列时遇到问题。
以前我的代码是

$query->whereIn('user', $users);

现在我已经将db type更改为json列,并尝试修改新版本的代码。
在原始mysql中,这是有效的

JSON_CONTAINS(user, '"tom","Bill"')

但当我把它放在eloquent/php中时,它总是失败或不返回任何东西。在这里,我传递了一个用户数组,前面使用了一个在原始sql中工作的where

$leads->whereRaw("JSON_CONTAINS(user, '"$users"')")

你知道如何让它在laravel中工作吗?这样我就可以传入一个字符串数组,在json列中查询它们,json列也包含一个字符串数组。
我的json列有这样的数据

["Paul", "Tom", "Bob"]
rqcrx0a6

rqcrx0a61#

mysql需要一个json字符串:

$leads->whereRaw('JSON_CONTAINS(user, ?)', [json_encode($users)])

在laravel 5.6.24中,您可以使用 whereJsonContains() :

$leads->whereJsonContains('user', $users)
mrwjdhj3

mrwjdhj32#

如果 $users 是一个名称数组,那么您应该对它进行迭代并添加 orWhereRaw 条件,请注意orwhereraw可以接受参数数组:

$users = ["Tom", "Bob"];

 foreach( $users as $user) {
      $leads->orWhereRaw("JSON_CONTAINS(user, ?)", [$user]);
 }

 $leads = $leads->get();

相关问题