Paginate渴望加载的关系
问题描述:
我正在使用Laravel 3.x.Paginate渴望加载的关系
Post::with( array('blogs' => function($query) { $query->where('user_id', '=', Auth::user()->id); }))->get();
我怎么能分页的职位?
答
这是我想出的解决方案。用户可以拥有许多博客,而帖子可以属于许多博客。
/**
* Get all posts by a user for all blogs.
* @return paginated posts.
*/
public static function get_posts_for_user($user_id, $limit)
{
return Post::left_join('blog_post', 'posts.id', '=', 'blog_post.post_id')
->join('blogs', 'blogs.id', '=', 'blog_post.blog_id')
->where('blogs.user_id', '=', $user_id)
->paginate($limit);
}
答
从上面的反馈看来,渴望加载不是你正在寻找。尝试这个。
Post::where('user_id', '=', Auth::user()->id)->paginate(10);
或者你可以添加post方法到用户模型。
public function posts()
{
return $this->has_many('Post');
}
然后使用它来获取用户的职位。
Auth::user()->posts()->paginate(10);
+0
我相信这不回答OP的问题。他想让所有发布到用户博客的帖子。并非所有用户发布的帖子。 – vFragosop 2013-03-26 21:09:44
答
FakeHeal,
假设$user->has_one('blog')
,你可以简单地使用Laravel魔法关系的getter:
$user = Auth::user();
$user->blog->posts();
如果是这样的情况并非如此,user->has_many('blog')
,你需要使用JOIN检索所有帖子针对所有用户博客。
$user = Auth::user();
$posts = Posts::join('blogs', 'blogs.id', '=', 'posts.blog_id')
->where('blogs.user_id', '=', $user->id)
->get('posts.*');
简单的答案是你不能这样做。你能更好地解释你想达到的目标吗?试图根据'post-> blog-> user_id'来过滤帖子,或试图获取**所有**帖子,并且只是加载属于该用户的博客?每个人可能都有完全不同的答案:) – vFragosop 2013-03-26 11:52:33
我想列出指定博客(blog-> user_id)的所有帖子。 – 2013-03-26 13:14:49