2013-03-26 146 views
1

我正在使用Laravel 3.x.Paginate渴望加载的关系

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

我怎么能分页的职位?

+1

简单的答案是你不能这样做。你能更好地解释你想达到的目标吗?试图根据'post-> blog-> user_id'来过滤帖子,或试图获取**所有**帖子,并且只是加载属于该用户的博客?每个人可能都有完全不同的答案:) – vFragosop 2013-03-26 11:52:33

+0

我想列出指定博客(blog-> user_id)的所有帖子。 – 2013-03-26 13:14:49

回答

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); 
    } 
1

从上面的反馈看来,渴望加载不是你正在寻找。尝试这个。

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

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