雄辩:获得相关模型的范围?

时间:2014-01-06 03:51:18

标签: scope eloquent

我有3个模型:用户,项目,任务

每个用户都有很多项目,每个项目都有很多任务。

我想做类似的事情:

$user->projects()->tasks()获取用户项目的任务。 projects()是一个hasMany()关系,我相信tasks()应该是一个范围,但不知道如何实现它。

1 个答案:

答案 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()方法来实现它。