Laravel雄辩的查询JSON列与在哪里?

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)

Jon*_*eir 5

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)


You*_*neL 3

如果$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)