【问题标题】:Many to Many to MorphToMany Relationships多对多到 MorphToMany 关系
【发布时间】:2020-08-22 18:08:23
【问题描述】:
我有一个 Exam、Question 和 Tag(Spatie/laravel-tags 包)模型。
Exam 包含许多 Questions(多对多),Question 包含许多 Tags(MorphToMany)。
我想在 Exam 模型上提供一个方法,通过其关联问题获取 Exam 的所有标签,以便 $exams→tags() 返回属于该考试的关联问题的所有标签。
谁能告诉我为实现这一目标而采取的最佳途径是什么?
【问题讨论】:
标签:
laravel
eloquent
relationship
laravel-query-builder
【解决方案1】:
如果你有适当的描述关系,就写这样的东西:
// Exam Model
public function tags()
{
return $this->questions->map(function($q){
return $q->tags;
})->collapse();
}
【解决方案2】:
你可以像这样从考试中获取所有标签
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
如果有帮助请告诉我