2015-01-21 24 views
5

Voglio ottenere tutti gli articoli (argomenti) con i loro commenti, se commenti user_id = $ id. Provo qualcosa di simile, ma non funziona. Quindi se Item non ha commenti con user_id = $ id, allora non ho bisogno di questo articolo.Laravel 4 Eager Vincoli di caricamento

Nel modello DiscussionsItem ho Methode:

public function discussionsComments() { 

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

La mia domanda controller è simile a questo:!

$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(); 

Il mio problema è che ho elementi con commenti, dove i commenti id_utente = $ id .

P.S. Ho bisogno di prendere 5 commenti, ma non posso immaginare come farlo, perché -> prendere (5) nel mio carico ansioso non funziona.

ho capirlo (il codice di lavoro):

$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

Ecco come si fa: http://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/ in MySQL –

risposta

0

si può fare un ambito personalizzato, o semplicemente limitare la quantità restituito dal vostro rapporto:

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