Paginate一个渴望加载的关系

时间:2013-03-26 08:17:28

标签: php laravel

我正在使用Laravel 3.x。

Post::with( array('blogs' => function($query) { $query->where('user_id', '=', Auth::user()->id); } ))->get();

如何对帖子进行分页?

3 个答案:

答案 0 :(得分:1)

从上面的反馈看来,急切的加载并不是你想要的。试试这个。

Post::where( 'user_id', '=', Auth::user()->id )->paginate( 10 );

或者您可以在用户模型中添加帖子方法。

public function posts()
{
    return $this->has_many( 'Post' );
}

然后使用它来获取用户帖子。

Auth::user()->posts()->paginate( 10 );

答案 1 :(得分:1)

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.*');

答案 2 :(得分:1)

这是我提出的解决方案。用户可以拥有许多博客,而且帖子可以属于许多博客。

    /**
    * 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);
    }