2015-01-21 19 views
5

Chcę uzyskać wszystkie przedmioty (tematy) z ich komentarzami, jeśli komentarze user_id = $ id. Próbuję czegoś takiego, ale to nie działa. Więc jeśli Przedmiot nie ma żadnego komentarza z identyfikatorem użytkownika = $ id, to nie potrzebuję tego przedmiotu.Laravel 4 Eager Ograniczenia ładowania

W modelu DiscussionsItem mam Methode:

public function discussionsComments() { 

    return $this->hasMany('DiscussionsComment', 'discussionsitem_id'); 
} 

mojej kwerendy w kontroler jest tak:!

$items = DiscussionsItem::whereBrandId($brand_id) 
     ->whereBrandCountryId($country_id) 
     ->with(['discussionsComments' => function($query) use ($id) { 
      $query->where('user_id', '=', $id); 
     }]) 
     ->whereHas('discussionsComments', function($query) use ($id) { 
      $query->where('user_id', '=', $id); 
     }) 
     ->with(['views' => function($query) use ($id) { 
      $query->where('user_id', $id)->count(); 
     }]) 
     ->orderBy('created_at', 'DESC')->get(); 

Moim problemem jest to, że aby elementy z komentarzami, gdzie komentarze user_id = $ id .

P.S. Potrzebuję 5 komentarzy, ale nie mogę sobie wyobrazić, jak to zrobić, ponieważ -> take (5) w moim gorliwym ładunku nie działa.

mi zrozumieć to (kod robocza):

$items = DiscussionsItem::whereBrandId($brand_id) 
     ->whereBrandCountryId($country_id) 
     ->whereHas('discussionsComments', function($query) use ($id) { 
      $query->where('user_id', '=', $id); 
     }) 
     ->with(['views' => function($query) use ($id) { 
      $query->where('user_id', $id)->count(); 
     }]) 
     ->orderBy('created_at', 'DESC')->get(); 


    $items->each(function($topic) use ($id, 5){ 
     $topic->comments = $topic->discussionsComments()->where('user_id', '=', $id)->get()->take(5); 
    }); 
+0

Oto jak to zrobić: http://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/ w MySQL –

Odpowiedz

0

można zrobić zakres niestandardowych, lub po prostu ograniczyć ilość zwracanych przez zależność:

public function discussionsComments() { 
    return $this->hasMany('DiscussionsComment', 'discussionsitem_id') 
     ->latest() 
     ->take(5); 
}