在我的应用程序中,用户可以创建任务并将其分配给可以是活动或已存档的项目,也可以在没有相关项目的情况下创建任务。
我现在要做的是获取公司用户创建的所有任务,这些任务分配给活动项目或没有分配项目。
我设法在Company
模型中使用以下代码完成第一部分:
public function tasks()
{
return $this->hasMany('App\Project', 'company')
->join('tasks', function($join)
{
$join->on('projects.id', '=', 'tasks.project')
->where('projects.status', '=', Project::STATUS_ACTIVE);
});
}
此函数获取分配给活动项目的所有公司任务,但我还想获取未分配给任何项目的任务(这由project
表中的tasks
列指示设为0)。
问题是我不知道在哪里放orWhere
条件。我尝试了很多改动,但没有一个改变。
此外,有一件事我没有得到:为什么连接功能不像以下那样?
$this->hasMany('App\Task', 'company')
->join('projects', ...
答案 0 :(得分:0)
我不确定我是否理解你的问题。如果您可以发布模型以及如何定义关系,那将会有很大帮助。 无论如何,为了浏览查询,我使用以下"规则":
然后从table1中检索与table5中的任何寄存器相关的寄存器,并通过table5的某个id值进行过滤。
public function navigation($table5ID){
return Table1::whereHas('table2',function($query) use ($table5ID){
$query->whereHas('table3',function($query2) use ($table5ID){
$query2->whereHas('table4',function($query3) use ($table5ID){
$query3->whereHas('table5',function($query4) use ($table5ID){
$query4->where('table5_id',$table5ID);
});
});
});
})->get();
}
我做了a post on my personal blog some time ago。希望这会有所帮助。
答案 1 :(得分:0)
经过一段时间的努力,我终于找到了解决问题的方法。
我的主要问题是由于对Eloquent ORM和/或数据库构建器的误解。
我为解决这个问题所做的工作如下:
$companyTasksQuery = DB::table('tasks')
->where('company', '=', $this->id)
->where('project', '=', 0)
->where('status', '=', Task::STATUS_INCOMPLETE);
return $this->hasMany('App\Task', 'company')
->join('projects', function($join)
{
$join->on('projects.id', '=', 'tasks.project')
->where('projects.status', '=', Project::STATUS_ACTIVE);
})
->select('tasks.*')
->union($companyTasksQuery);
从上面的代码中可以看出,我有点切换了连接。以前我使用projects
加入了tasks
表格,但现在我反过来做->select()
解决了我的问题(正如您之前的代码所示)我完全错过了select
。
为了添加其他条件,我只是将其添加为另一个查询的联合,该查询选择未分配给任何项目的所有未完成任务。