Laravel Eloquent使用Where In查询JSON列?

时间:2018-01-10 13:27:43

标签: php mysql laravel eloquent laravel-eloquent

我在查询json列时遇到了麻烦。

以前我的代码是

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

现在我已将db类型更改为JSON列,并尝试修改新版本的代码。

在RAW MYSQL中可以使用

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

但是,当我把它放在eloquent / php中时,它会一直失败或返回注意。在这里,我传递的是一组用户,之前使用的是WhereIn,它在原始SQL中工作

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

任何想法如何使它在Laravel中工作,所以我可以传入一个字符串数组,查询它们包含一个字符串数组的json列。

我的Json colum有这样的数据

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

2 个答案:

答案 0 :(得分:3)

MySQL需要一个JSON字符串:

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

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

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

答案 1 :(得分:1)

如果CitySelect是名称数组,那么您应该迭代它并添加$users条件,请注意enter image description here可以接受参数数组:

orWhereRaw