嗨,我想检索保存在数据库中的
projects
,该数据库由身份验证者 user
拥有,该身份验证者还创建 clients
(他们有许多项目和任务)和 tasks
(属于项目和任务和用户) ).
我想检索状态表中未标记为已关闭的所有任务,我知道它的 id 是 2,我可以这样检索:
public function getOpenProjects() {
return \Project::with(['clients', 'tasks', 'status'])
->where('status_id', '!=', '2')
->whereUserId(Auth::user()->id)
->get();
}
但是我如何更改它以查询状态表中的列,即该表中的名称列?
你可以试试这个:
$value = 'someName';
Project::with(['clients', 'tasks'])
// Query the name field in status table
->with(['status' => fn($q) $q->where('name', $value)])
->where('status_id', '!=', '2')
->whereUserId(Auth::user()->id)
->get();
你也可以尝试这个(只有当
query
返回你想要的name
时,它才会获取记录,否则没有):
$value = 'someName';
Project::with(['clients', 'tasks', 'status'])
// Query the name field in status table
->whereHas('status', fn($q) => $q->where('name', $value))
->where('status_id', '!=', '2')
->whereUserId(Auth::user()->id)
->get();
你可以试试这个:
Project::with(['clients', 'tasks' => function($q) use($value) {
// Query the name field in status table
$q->where('status_id', '!=', '2');
}])
->whereUserId(Auth::user()->id)
->get();
现在,您可以使用 whereRelation
public function getOpenProjects() {
return Project::with(['clients', 'tasks', 'status'])
->whereRelation('status', 'name', '!=', '2')
->whereUserId(Auth::user()->id)
->get();
}
如果您需要添加条件,您可以这样做
return Query::with(['department' => function ($query) use ($department) {
$query->when($department, function ($query) use ($department) {
$query->whereId($department);
});
}, 'category' => function($query) use ($category) {
$query->when($category, function ($query) use ($category) {
$query->whereId($category);
});
}])->when($activeStatus, function ($query) use ($activeStatus) {
$activeStatus = (request()->active_status === 'active') ? 1 : 0;
$query->whereActive($activeStatus);
})->latest()->paginate($dataPerPage);
或者你也可以这样做
return Query::with('department', 'category')
->when($department, function($query) use ($department) {
$query->whereHas('department', function (Builder $query) use ($department) {
$query->whereId($department);
});
})->when($category, function ($query) use ($category) {
$query->whereHas('category', function (Builder $query) use ($category) {
$query->whereId($category);
});
})->when($activeStatus, function ($query) use ($activeStatus) {
$activeStatus = (request()->active_status === 'active') ? 1 : 0;
$query->whereActive($activeStatus);
})->latest()->paginate($dataPerPage);