我有3个模型:用户,项目,任务
每个用户都有很多项目,每个项目都有很多任务。
我想做类似的事情:
$user->projects()->tasks()
获取用户项目的任务。 projects()
是一个hasMany()
关系,我相信tasks()
应该是一个范围,但不知道如何实现它。
答案 0 :(得分:1)
好吧,假设你有3个以这种方式定义的模型:
用户强>
class User extends Eloquent
{
public function projects()
{
return $this->hasMany('Project');
}
}
<强>项目强>
class Project extends Eloquent
{
public function tasks()
{
return $this->hasMany('Task');
}
public function user()
{
return $this->belongsTo('User');
}
}
<强>任务强>
class Task extends Eloquent
{
public function project()
{
return $this->belongsTo('Project');
}
}
我相信这足以查询所有用户项目和任务。
如果您已经拥有User类的实例,则只需加载所需的关系:
$user->load('projects.tasks');
dd($user);
定义了belongsTo
个关系后,您可以使用他们所属的项目和用户查询所有任务:
Task::with('project.user')->get();
我不确定只获取任务列表。这是我想到的第一个解决方案:
$tasks = Task::whereHas('project', function($query) use ($user){
$query->whereHas('user', function($query) use ($user){
$query->where('id', $user->id);
});
})->get()
我相信还有其他方法可以使用查询构建器和join()
方法来实现它。