У Laravel есть много через другую модель - PullRequest
0 голосов
/ 12 июня 2018

У меня такая ситуация: модели Parent и Student находятся во многих отношениях, каждая из них belongsTo() модель User.Branch имеет много от Student до User (hasManyThrough(Student::class, User::class);).Мне нужно установить такие отношения с Parent также: hasManyThrough(Parent::class, User::class); Но проблема в том, что branch_id в users таблице можно обнулять для родителей.Поэтому я не могу забрать родителей под ветку.Я должен забрать тех родителей, ученики которых находятся в текущем отделении.Как я могу получить у Branch много Parent с через Student с 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;
            }
        }
});

1 Ответ

0 голосов
/ 12 июня 2018

Вам нужно использовать вложенные 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...