从所有记录中获取所有相关的多对多,而不是从每个记录 laravel
Posted
技术标签:
【中文标题】从所有记录中获取所有相关的多对多,而不是从每个记录 laravel【英文标题】:Get all related many-to-many from all records instead from each record laravel 【发布时间】:2017-07-25 01:48:57 【问题描述】:我有通过post_tags
与tags
表相关的posts
表。我想从所有用户帖子中获取所有标签。假设一个用户有 3 个帖子,那么我想从其中 3 个帖子中获取所有标签,而无需在用户帖子中循环来获取每个帖子的各个相关标签,这就像 join + distinct 但也许 Eloquent 中有方法可以让它变得简单。谢谢,如果我的问题不清楚或重复,请告诉我。
【问题讨论】:
【参考方案1】:使用whereHas()
:
$tags = Tag::whereHas('posts', function($q) use($userId)
$q->where('user_id', $userId);
)->get();
【讨论】:
user_id
未找到,因为在查询生成器中从未调用过posts 表,因此没有user_id 列。
@AnggaAriWijaya 如果你在posts
表中没有user_id
,这意味着你没有正确定义Eloquent 关系。
我有,但是你的代码指向它只返回一条记录。
@AnggaAriWijaya 如果你想获取用户在他的帖子中使用的所有标签,那么这段代码是 100% 工作的。如果这不是您所需要的,请说明您想要得到什么。
我明白了,之前很抱歉,我在标签模型中的关系反向输入错误,所以它一开始就没有到达帖子。我会接受你的回答,谢谢。以上是关于从所有记录中获取所有相关的多对多,而不是从每个记录 laravel的主要内容,如果未能解决你的问题,请参考以下文章