2017-10-19 91 views
0

我試圖檢索(分頁)帖子列表,並在一個Eloquent查詢語句中包含其最新評論。帖子和評論通過一對多關係相連。在1個查詢中檢索所有帖子及其最新評論

這是我的嘗試:

Post::with(['comments' => function ($query) { 
    $query->orderBy('created_at', 'asc')->take(3); 
}])->simplePaginate(15); 

但是,只檢索總3條評論,平均每個職位不是3個評論。

+1

我不認爲laravel允許你限制渴望加載的關係。我會建議迭代後數組並加載評論,例如: $ posts = Post :: simplePaginate(15); foreach($ posts as post){$ post-> load(['comments'=> function($ query){$ query-> orderBy('created_at','asc') - > take(3);}]) ' – pseudoanime

回答

0

修訂

看來你不能用1個查詢做到這一點。
您仍然可以在父模型此功能,被稱爲「lastComments」:

function lastComments() 
{ 
    return $this->hasMany('App\Post', 'post_id')->orderBy('created_at')->take(3); 
} 

您加載信息與正常雄辯代碼:

Post::simplePaginate(15); 

並在視圖頁面顯示您的評論這種方式:

@foreach($post->lastComments as $comment) 
    <!-- ... --> 
@endforeach 
+0

據我可以看到,產生相同的結果,總共只有3條評論加載。 – Antiz

+0

我更新了答案 –

0

加入表ID是必要
試試這個:

Post::with(array('comments'=>function($query){ 
      $query->select('id as commentid','comment')->orderBy('created_at', 'asc')->take(3); 
     }))->simplePaginate(15); 
+0

這並沒有爲我產生任何結果。選擇函數('comment')的第二個參數有什麼用? – Antiz

0

您需要設置$with變量在App\Post型號:

protected $with = ['lastComments']; 

這隻要你取一個帖子的方式,Laravel會自動加載的意見吧。

相關問題