我有一个查询来获取文件夹中所有已记录的活动。
在这种情况下,ID为2。我试图仅获取2上的记录,但是由于我在搜索结果的位置或位置,因此该用户的所有文件夹中的所有活动均得到记录。
您知道如何解决此查询吗?
$filtertext = $request->filter;
$data = Activity::select('activity_log.*', 'users.first_name', 'users.last_name', 'users.email')
->join('users', 'users.id', '=', 'activity_log.causer_id')
->where('subject_id', '=', $id)
->where('subject_type', '=', 'App\Models\Node')
->orWhere('first_name', 'like', '%' . $filtertext . '%')
->orWhere('last_name', 'like', '%' . $filtertext . '%')
->orWhere('email', 'like', '%' . $filtertext . '%')
->with([
'subject' => function ($q) {
$q->whereNull('deleted_at');
}
])
->orderBy('created_at', 'desc')
->paginate(12);
答案 0 :(得分:3)
当您将一组orwhere
与普通where
结合使用时,应将它们放在自己的闭包中,以便查询生成器知道除了其他where
。
$filtertext = $request->filter;
$data = Activity::select('activity_log.*', 'users.first_name', 'users.last_name', 'users.email')
->join('users', 'users.id', '=', 'activity_log.causer_id')
->where('subject_id', '=', $id)
->where('subject_type', '=', 'App\Models\Node')
->where(function ($query) use ($filtertext) {
$query
->orWhere('first_name', 'like', '%' . $filtertext . '%')
->orWhere('last_name', 'like', '%' . $filtertext . '%')
->orWhere('email', 'like', '%' . $filtertext . '%');
})
->with([
'subject' => function ($q) {
$q->whereNull('deleted_at');
}
])
->orderBy('created_at', 'desc')
->paginate(12);