Laravel,加入后查询加入 table

Laravel, query on joined table after join

功能: 我正在显示响应列表(用户与响应相关),我希望能够按用户名进行过滤

我有一个分配响应table,里面有一个用户 ID

我将根据该 ID

将用户加入此 table

我有一个针对这些回复的搜索过滤器

我希望能够按用户名搜索

是否可以这样做;

$responses = AssignmentResponse::query()->where('assignment_id', '=', $request->assignment)
        ->with([
            'likes',
            'user'
        ]);

    //FILTERS
    if ($request->queryString) {
        $responses->where('user.name', 'LIKE', '%' . $request->queryString . '%');
    }

    return $responses->get();

只需通过回调更改关系:

return AssignmentResponse::where('assignment_id', $request->assignment)
    ->with('likes')
    ->when(
        $request->filled("queryString"),
        function ($q) use ($request) {
            $q->whereHas("user", fn ($q) => $q->where("name", "like", "%$request->queryString%"))
                ->with(["user" => fn ($q) => $q->where("name", "like", "%$request->queryString%")]);
        }
    )
    ->get()

请注意,with() and whereHas() are used to ensure only matching values are returned. A conditional clause 都用于代替您的 if 语句。