2013-02-07 93 views
2

我有一個Post模型和一個Tag模型成爲多對多的關係。Laravel 3雄辯的多對多關係

當我的職位和所有標籤後有我用這個和它的作品只是罰款:

$posts = Post::with(array('tags')) 
      ->where('cat_id', '=', $cat->id) 
      ->where_published(1) 
      ->order_by('created_at', 'desc') 
      ->paginate('10'); 

上面的代碼顯示創建的最新文章和分頁他們。

我想實現同樣的事情,但另一種方式,從標籤開始,並獲得由created_at列分頁和排序的帖子列表。

Tag::with(array('posts')) 
       ->where('tagname', '=', $tag) 
       ->first(); 

這個工程,但顯示所有帖子,我希望他們分頁,排序和過濾where_published(1)。

這可以通過使用急切的加載(沒有急於加載我已經知道這樣做,但會有太多的查詢作出)的雄辯?

我在哪裏可以過濾和如何讓他們分頁?

回答

1

你可以這樣做:

 
Tag::with(array('posts' => function ($query) { 
    $query->where('published', '=', 1); 
})->where('tagname', '=', $tag) 
->first(); 

然而,這幾乎是所有你可以用它做的不幸。訂購和大多數其他的東西,不支持作爲尚未 - 我解決這個得到的方式是在模型中像這樣創建一個函數:)模型

 
public function posts_ordered() 
{ 
    return $this->has_many_and_belongs_to('Post')->order_by('your_field', 'asc'); 
} 

所以,你將有職位正常功能( ,但也posts_ordered可以使用,如:

Tag::with('posts_ordered')->where('tagname', '=', $tag)->first();

可惜你不能傳遞變量(據我都試過)這些功能,因此需要建立單獨的。