Laravel Eloquent Загрузка нескольких имеет много отношений - PullRequest
0 голосов
/ 24 октября 2018

В моей БД у модели Class есть много Student, и у каждого Student есть много Homework, а у каждого Homework есть много Question.Как я могу написать один запрос с готовой загрузкой, чтобы получить каждый Question, который связан с одним конкретным Class?

Я могу получить вложенную структуру с этим кодом:

$class = Class::find($classId);
$collection = $class->with('students.homeworks.questions')->get();

Как я могу получить массив всех вопросов в этой коллекции?То, что я получаю в настоящее время с помощью toArray() метода, представляет собой такую ​​структуру:

{ //Class
    ...
    students: [
        {
            homeworks: [
                {
                    questions: [{...}]
                },
                ...
            ]
        },
        ...
    ]
}

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы можете создать функцию в модели Студентов:

public function questions(){
   $questions = [];
   foreach($this->homework as $homework){
        foreach($homework->questions as $question){
           array_push($questions, $question);
        }
   }
   return $questions;
}

Таким образом, каждый раз, когда у вас есть объект студента, вы можете получить массив всех вопросов, таких как:

$student->questions

Надеюсь, это поможет вам.

0 голосов
/ 24 октября 2018

Для этого случая нет родных отношений.

Я создал HasManyThrough отношение с неограниченными уровнями: Репозиторий на GitHub

После установки вы можетеиспользуйте это так:

class Class extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function questions() {
        return $this->hasManyDeep(Question::class, [Student::class, Homework::class]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...