这是我的数据库架构的链接:
如何从使用ID订阅用户的博客中获取所有主题?我使用雄辩的ORM。
我在用户模型中添加了以下几行:
public function blogs()
{
return $this->belongsToMany('Blog', 'blog_subscriptions');
}
然后在控制器中请求
User::find(1)->blogs; // User id is hardcoded
这样,我得到了用户已订阅的所有博客。现在,我被困在如何获取这些博客的主题上。
假设关系:
// User
belongsToMany('Blog', 'user_subscriptions')
// Blog
belongsToMany('User', 'user_subscriptions')
hasMany('Topic')
// Topic
belongsTo('Blog')
1我的方式,无论嵌套的深度如何,它都适用于任何关系:
User::with(['blogs.topics' => function ($q) use (&$topics) {
$topics = $q->get()->unique();
}])->find($userId);
2种口才标准方法:
$topics = Topic::whereHas('blog', function ($q) use ($userId) {
$q->whereHas('users', function ($q) use ($userId) {
$q->where('users.id', $userId);
});
})->get();
// or
$user = User::find($userId);
foreach ($user->blogs as $blog)
{
$blog->topics; // collection of topics for every single blog
}
3个加入:
$topics = Topic::join('blogs', 'topics.blog_id', '=', 'blogs.id')
->join('user_subscriptions as us', function ($j) use ($userId) {
$j->on('us.blog_id', '=', 'blogs.id')
->where('us.user_id', '=', $userId);
})->get(['topics.*']);
请注意,最后一个解决方案将取决于您的数据透视数据一致性。也就是说,如果不能确定其中没有多余的条目user_subscriptions
(例如,博客或用户已被删除,但枢轴条目仍然存在),那么您还需要进一步加入users
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句