2013-02-07 5 views
2

나는 Post 모델과 Tag 모델을 다 대 다 관계로 가지고있다.Laravel 3 웅변적인 many-to-many 관계

나는 게시물을 얻을 때 모든 태그 게시물은 내가 이것을 사용하게하고 그것을 잘 작동합니다 :

$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'); 
} 

그래서 당신이 (게시물에 대한 정상적인 기능을해야합니다) 모델 따라서, 이러한 기능에 (내가 시도까지로) 불행하게도 당신이 변수를 전달할 수 없습니다

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

별도을 만들 필요가 :뿐만 아니라 posts_ordered처럼 사용할 수 있습니다.