查询不仅获得特定的ID

时间:2018-11-30 09:55:17

标签: php laravel eloquent

我有一个查询来获取文件夹中所有已记录的活动。

在这种情况下,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);

1 个答案:

答案 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);