php-如何列出Laravel嵌套表中的所有项目
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-如何列出Laravel嵌套表中的所有项目,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2701字,纯文字阅读大概需要4分钟。
内容图文
![php-如何列出Laravel嵌套表中的所有项目](/upload/InfoBanner/zyjiaocheng/677/18a5a615650f4aef856316a48a7b2915.jpg)
我正在使用Laravel的Eloquent ORM,但我在急于加载要显示的项目时遇到麻烦.
这是场景:
>用户关注博客
>博客有帖子
我有一个名为Relationships的数据库表,该表用于存储用户ID和Blog ID,以显示哪个用户关注哪个Blog.我有一个描述博客的Blog表,还有一个Posts表. Relationships表将是我的数据透视表,用于将Users和Blogs表连接在一起.现在,我需要在列表中列出用户遵循的所有博客中的所有帖子.
这是我的用户模型:
public function following() {
return $this->has_many_and_belongs_to('Blog', 'relationships', 'user_id', 'blog_id');
}
这是我的Blog模型:
public function followers() {
return $this->has_many_and_belongs_to('User', 'relationships', 'blog_id', 'user_id');
}
public function posts() {
return $this->has_many('Post');
}
这就是我试图检索列表中的帖子的方式:
$posts = User::with(array('following', 'following.posts'))
->find($user->id)
->following()
->take($count)
->get();
这段代码仅列出了实际的Blog,我需要他们的帖子.
感谢您的帮助,如果您需要更多详细信息,请告诉我.
解:
我在下面稍加修改了可接受的答案,我决定使用JOIN将SQL调用的数量减少到仅1个调用.这里是:
$posts = Post::join('blogs', 'posts.blog_id', '=', 'blogs.id')
->join('relationships', 'blogs.id', '=', 'relationships.blog_id')
->select('posts.*')
->where('relationships.user_id', '=', $user->id)
->order_by('posts.id', 'desc')
->take($count)
->get();
解决方法:
这是本机口才方法无法实现的.但是您可以使用一些Fluent方法来连接这些表.例如:
在这里编辑:我已将急切加载添加到Post查询中.
$user = User::find(1);
$posts = Post::with('blog') // Eager loads the blog this post belongs to
->join('blogs', 'blogs.id', '=', 'posts.blog_id')
->join('relationships', 'relationships.blog_id', '=', 'blogs.id')
->where('relationships.user_id', '=', $user->id)
->order_by('posts.id', 'desc') // Latest post first.
->limit(10) // Gets last 10 posts
->get('posts.*');
foreach ($posts as $post) {
print($post->title);
}
例如,如果您还需要该用户关注的所有博客的列表以显示在边栏上.您可以DYI而不是依靠Eloquent,这应该更快,更可定制.例如:
$user = User::with('following')->find(1);
// This creates a dictionary for faster performance further ahead
$dictionary = array();
foreach ($user->following as $blog) {
$dictionary[$blog->id] = $blog;
}
// Retrieves latest 10 posts from these blogs that he follows
// Obs: Notice the array_keys here
$posts = Post::where_in('blog_id', array_keys($blog_ids))
->order_by('posts.id', 'desc')
->limit(10)
->get();
// Hydrates all posts with their owning blogs.
// This avoids loading the blogs twice and has no effect
// on database records. It's just a helper for views.
foreach ($posts as $post) {
$post->relationships['blog'] = $dictionary[$post->blog_id];
}
在视图上:
foreach ($user->following as $blog) {
print($blog->title);
}
foreach ($posts as $post) {
print($post->title . ' @'. $post->blog->title);
}
内容总结
以上是互联网集市为您收集整理的php-如何列出Laravel嵌套表中的所有项目全部内容,希望文章能够帮你解决php-如何列出Laravel嵌套表中的所有项目所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。