Многие ко многим для преобразования отношений со многими - PullRequest
0 голосов
/ 07 мая 2020

У меня есть модели Exam , Question и Tag (Spatie / laravel -tags package).

An Exam состоит из множества Questions (от многих ко многим), а Question из множества Tags (MorphToMany).

Я хотел бы иметь метод в модели Exam для получения всех тегов Exam через связанные с ним вопросы, чтобы $exams→tags() возвращал все теги из связанных вопросов, принадлежащих экзамену.

Может ли кто-нибудь указать мне, какой, возможно, лучший курс для этого?

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Если у вас есть правильно описанные отношения, просто напишите что-то вроде этого:

// Exam Model

public function tags()
{
    return $this->questions->map(function($q){
        return $q->tags;
    })->collapse();
}
0 голосов
/ 07 мая 2020

вы можете получить все теги из таких экзаменов

return Exam::with('questions.tags')->get();

Если вам нужны некоторые условия для тегов, вы можете сделать это

return Exam::with(['questions.tags'=> function($query){
  $query->where('..','..')
}])->get();

Если вам нужна правильная функция внутри ваша модель, как вы сказали, просто поместите logi c в одну функцию. ваша модель, как эта

Exam.php
public function getAllTags()
{
   return $this->with(['questions.tags'=> function($query){
     $query->select('..');
   }])->get();
}
// This will just give you what you need 

Дайте мне знать, поможет ли это

...