项目和任务:仅获取所有任务都处于活动状态的项目



我有两个模型:Project和Task。

在他们的模型中,两者都有相互关系。

任务的进度状态为in_progress(1(或completed(0(。

使用关系,我试图只得到那些只完成了任务的项目。

现在,使用我的代码,我得到的项目至少完成了一项任务。

谢谢你的帮助!

public function completedtasks()
{
return $this->hasmany(Task::class)->whereStatus_id(1)->whereProgress_id(0);
}

我认为你应该用不同的方式来处理这个问题:

在您的项目中创建您的关系方法:

/**
* @return HasMany
*/
public function tasks(): HasMany
{
return $this->hasMany(Task::class);
}

然后你可以这样过滤你的项目:

$projects = Project::whereHas('tasks', function($query) {
return $query->where('progress_id', 1);
})->get();

您可以使用progress_id = 0获得所有没有任何任务的项目。然后,您还可以检查项目是否有任何带有progress_id = 1(已完成(的任务。[项目不能有任何带有progess_id = 0的任务,并且必须至少有一个带有progress_id = 1的任务]

Project::whereDoesntHave('tasks', function ($query) {
$query->where('progress_id', 0);
})->whereHas('tasks', function ($query) {
$query->where('progress_id', 1);
})->get();

Laravel 6.x Docs-Eloquent Relationships-查询关系缺失-whereDoesntHave

Laravel 6.x文档-显式关系-查询关系存在-whereHas

最新更新