通过 laravel 中的关系进行咨询
Posted
技术标签:
【中文标题】通过 laravel 中的关系进行咨询【英文标题】:Consultation through relationships in laravel 【发布时间】:2020-05-30 14:22:16 【问题描述】:我在这里无休止地寻找一个回答我的问题的问题,但我没有找到它。我的问题如下,我有 3 个模型:用户、帖子和评论。其中 user 与一对多发布有关系,而 Post 也与一对多 cmets 有关系。如何在所有帖子上获取所有用户的 cmets? 目前我的解决方案如下所示:
模型用户:
public function comments()
$comments = array();
foreach ($this->posts()->get() as $el)
foreach ($el->posts()->get() as $nEl)
array_push($comments, $nEl);
return collect($comments);
如果有的话,我想要一个更便宜的 laravel 原生解决方案。
【问题讨论】:
在docs 中检查has many through
。始终牢记 laravel 建议的命名约定以避免大多数问题(即单数/复数,小写/大写等)。顺便说一句,你的情况是基本的hasManyThrough
关系。
【参考方案1】:
在您的 User
模型上,类似于:
public function getComments()
return Comment::whereHas('posts', function ($query)
$query->where('user_id', $this->id);
)->get();
另见: https://laravel.com/docs/6.x/eloquent-relationships#has-many-through
【讨论】:
posts
在这种情况下是数据库中表的名称还是模型的名称?
posts
在这种情况下是关系的名称以上是关于通过 laravel 中的关系进行咨询的主要内容,如果未能解决你的问题,请参考以下文章