多对多对多对多关系

问题描述 投票:0回答:2

我有一个[[考试,问题标签(Spatie / laravel-tags软件包)模型。

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

我想在Exam模型上有一种方法,可以通过其相关问题获取Exam的所有标签,以便$exams→tags()从属于该考试的相关问题中返回所有标签。

任何人都可以指出我要实现这一目标的最佳课程是什么?

laravel eloquent relationship laravel-query-builder
2个回答
1
投票
如果您具有适当的描述关系,只需编写类似的内容:

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


0
投票
您可以从这样的考试中获得所有标签

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

让我知道这是否有帮助
© www.soinside.com 2019 - 2024. All rights reserved.