2017-04-06 31 views
1

有人可以告诉我如何将使用RAW SQL或查询生成器创建的连接的结果映射到雄辩模型?Laravel 5.4定制连接(原始sql)映射到Eloquent模型

队拥有众多用户谁有很多学生谁拥有许多项目

我在做一个连接,通过子关系得到一个团队的所有项目

例子:

$projects = Project::join('students', 'students.id', '=', 'projects.student_id') 
      ->join('users', 'users.id', '=', 'students.user_id') 
      ->join('teams', 'teams.id', '=', 'users.team_id') 
      ->select('projects.*', 'students.*', 'users.*', 'teams.*') 
      ->get(); 

现在,我怎么能得到这里的结果映射到一个具有子关系映射其各自模型的“项目”模型集合

  • 学生
  • 用户

回答

2

你并不需要使用连接。改用Eloquent的热切加载。

提供了你的模型有关系定义正确,下面应该做的伎俩:

$projects = Project::with('student.user.team')->get(); 
foreach($projects as $project) { 
    $student = $project->student; //Student model 
    $user = $student->user; // User model 
    $team = $user->team; // Team model 
} 

UPDATE: 如果你想获取给定团队项目执行以下操作:

$projects = Project::with('student.user.team')->whereHas('student.user.team', function($query) use ($teamId) { 
    $query->whereId($teamId); 
})->get(); 
+0

但我需要指定团队,有问题,在你的例子我不能,如果我想做过滤和东西我会怎么做? – darkylmnx

+0

和hasmany通过似乎是一个很好的答案,但它onlu允许一个中间表,在这里我有两个中间 – darkylmnx

+0

和这里我d'ont需要查询团队,我只需要项目相关的团队 – darkylmnx

相关问题