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
语句。
功能: 我正在显示响应列表(用户与响应相关),我希望能够按用户名进行过滤
我有一个分配响应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
语句。