多对多到 MorphToMany 关系

Many to Many to MorphToMany Relationships

我有一个考试问题标签(Spatie/laravel-tags包) 型号。

一个Exam由许多Questions(多对多)组成,Question有许多Tags(MorphToMany)。

我想在 Exam 模型上有一个方法来通过其相关问题获取 Exam 的所有标签,这样 $exams→tags() returns 来自属于考试的相关问题的所有标签.

谁能告诉我实现这一目标的最佳途径是什么?

如果你有合适的描述关系,就这样写:

// Exam Model

public function tags()
{
    return $this->questions->map(function($q){
        return $q->tags;
    })->collapse();
}

你可以从这样的考试中获得所有标签

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

如果你想要标签的一些条件,你可以这样做

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

如果你想像你说的那样在你的模型中使用一个合适的函数,只需将逻辑放入一个函数中。你的模型就像这样

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

如果有帮助请告诉我