我遇到这种情况:Parent
和Student
模型属于多对多关系,每个模型都belongsTo()
User
模型。 Branch
有许多Student
到User
(hasManyThrough(Student::class, User::class);
)。我需要与Parent
建立类似的关系:hasManyThrough(Parent::class, User::class);
但问题是branch_id
表中的users
对于父母来说可以为空。所以我不能在分支机构下取得父母。我必须去找那些学生在现任分校的父母。如何让Branch
在Parent
Student
的{{1}}内获得许多Branch
?
以下是我尝试解决此问题的一些尝试。在parents()
中的Branch.php
方法中:
return \App\Parent::has('students.user.branch', $this)->get();
没有工作。我知道它不应该起作用。下一个:
return \App\Parent::whereHas('students', function($query){
$query->where() // stuck here. something could have been done here
})->get();
我甚至尝试过滤父母集合,但不幸的是,它只返回集合中的第一个父集合:
return \App\Parent::all()->filter(function($parent){
foreach($this->students as $student){
foreach($student->parents as $currentParent){
return $parent->id == $currentParent->id;
}
}
});
答案 0 :(得分:1)
您需要使用嵌套的whereHas
return \App\Parent::whereHas('students', function($query) use ($branchId){
$query->whereHas('user', function($subQu) use ($branchId){
$subQu->where('branch_id','=',$branchId);
});
})->with('students','students.user','students.user.branch')->get();