我試圖檢索(分頁)帖子列表,並在一個Eloquent查詢語句中包含其最新評論。帖子和評論通過一對多關係相連。在1個查詢中檢索所有帖子及其最新評論
這是我的嘗試:
Post::with(['comments' => function ($query) {
$query->orderBy('created_at', 'asc')->take(3);
}])->simplePaginate(15);
但是,只檢索總3條評論,平均每個職位不是3個評論。
我試圖檢索(分頁)帖子列表,並在一個Eloquent查詢語句中包含其最新評論。帖子和評論通過一對多關係相連。在1個查詢中檢索所有帖子及其最新評論
這是我的嘗試:
Post::with(['comments' => function ($query) {
$query->orderBy('created_at', 'asc')->take(3);
}])->simplePaginate(15);
但是,只檢索總3條評論,平均每個職位不是3個評論。
修訂
看來你不能用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
據我可以看到,產生相同的結果,總共只有3條評論加載。 – Antiz
我更新了答案 –
加入表ID是必要
試試這個:
Post::with(array('comments'=>function($query){
$query->select('id as commentid','comment')->orderBy('created_at', 'asc')->take(3);
}))->simplePaginate(15);
這並沒有爲我產生任何結果。選擇函數('comment')的第二個參數有什麼用? – Antiz
您需要設置$with
變量在App\Post
型號:
protected $with = ['lastComments'];
這隻要你取一個帖子的方式,Laravel會自動加載的意見吧。
我不認爲laravel允許你限制渴望加載的關係。我會建議迭代後數組並加載評論,例如: $ posts = Post :: simplePaginate(15); foreach($ posts as post){$ post-> load(['comments'=> function($ query){$ query-> orderBy('created_at','asc') - > take(3);}]) ' – pseudoanime