首页 > 解决方案 > Laravel Eloquent - 获取多关系的多关系

问题描述

假设以下结构:

Auser有很多projects。Aproject有很多tasks

目标:我想得到tasks一个确定的$user。实现这一目标的最优雅的方法是什么?

我目前使用的是一个大的、非直观的函数链,它返回一个集合而不是一个集合构建器实例:

return $user->projects()->with('tasks')->get()->pluck('tasks')->flatten();

这就是关系的样子:

class User extends \Illuminate\Database\Eloquent\Model {
    public function projects(){
        return $this->hasMany(Project::class);
    }
}

class Project extends \Illuminate\Database\Eloquent\Model {
    public function tasks(){
        return $this->hasMany(Task::class);
    }
}

标签: phplaraveleloquent

解决方案


Has Many Through关系理解为访问另一种模式关系的数据提供快捷方式有点复杂。
在您的用户模型中,像这样建立关系:

public function tasks()
{
   return $this->hasManyThrough(
     Task::class,
     Project::class,
     'user_id', // Foreign key on projects table...
     'project_id', // Foreign key on tasks table...
     'id', // Local key on users table...
     'id' // Local key on projects table...
   );
}

推荐阅读