多对多到 MorphToMany 关系
Posted
技术标签:
【中文标题】多对多到 MorphToMany 关系【英文标题】:Many to Many to MorphToMany Relationships 【发布时间】:2020-08-22 18:08:23 【问题描述】:我有一个 Exam、Question 和 Tag(Spatie/laravel-tags 包)模型。
Exam
包含许多 Questions
(多对多),Question
包含许多 Tags
(MorphToMany)。
我想在 Exam 模型上提供一个方法,通过其关联问题获取 Exam 的所有标签,以便 $exams→tags()
返回属于该考试的关联问题的所有标签。
谁能告诉我为实现这一目标而采取的最佳途径是什么?
【问题讨论】:
【参考方案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
如果有帮助请告诉我
【讨论】:
以上是关于多对多到 MorphToMany 关系的主要内容,如果未能解决你的问题,请参考以下文章