我有两个过滤器:
{j}的allowed
和blocked
包含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();
这不起作用,我试图弄清楚正确的方法。有没有人看到上述代码的问题。
答案 0 :(得分:0)
考虑使用laravel的whereIn
whereNotIn
个函数。您将数组作为函数的第二个参数传递。
答案 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
。