Laravel / Eloquent / json"其中"包含和"不会"包含

时间:2018-05-20 19:08:33

标签: php laravel eloquent

我有两个过滤器: {j}的allowedblocked包含json并包含允许查看记录的用户列表。例如:

record_id 1 
allowed ["1","2"] // nullable
blocked ["5","6"] // nullable

现在我需要选择特定user_id可以查看的所有记录。

Records::where(function ($query) use ($user_id) {
        $query->where("allowed->$user_id", '!=', null)
            ->orWhere("allowed", null);
    })->where("blocked->$user_id", null)->get();

这不起作用,我试图弄清楚正确的方法。有没有人看到上述代码的问题。

2 个答案:

答案 0 :(得分:0)

考虑使用laravel的whereIn whereNotIn个函数。您将数组作为函数的第二个参数传递。

Reference

答案 1 :(得分:-1)

我无法对此进行测试,但我相信这应该可行:

Records::where(function ($query) use ($user_id) {
    $query->whereRaw('JSON_CONTAINS(allowed, ?)', [$user_id])
        ->orWhere('allowed', null);
})->where('JSON_CONTAINS(blocked, ?) = 0', [$user_id])->get();

基本上,您正在搜索json列表,因此您需要使用JSON_CONTAINS