2017-10-17 62 views
0

我有一個Status模型,其中每個實例可以有多個子狀態/註釋。我能夠通過這種關係功能的方式來收集這些意見:如何正確高效地使用Eloquent加載新記錄

public function comments() { 
    return $this->hasMany('App\Models\Status', 'parent_id'); 
} 

現在對網頁的初始加載,每個狀態顯示最多爲4條(最後4個最近的評論)。我現在想要做的是:

在選擇「查看更多評論」按鈕後,向端點發出一個AJAX請求,以抓取前20個最新評論並將它們呈現給頁面。我已經能夠設置我的AJAX就好,甚至渲染,但我抓住了所有的評論,甚至已經提供的初步評論,而不是隻有下一組的20塊。

我應該使用Eloquents Chunk MethodTake MethodSplice Method?或另一組方法的組合?

回答

0

使用分頁。

$status = Status::find(1); 
$comments = $status->comments() 
    ->latest() // Equivalent to: orderBy('created_at', 'desc') 
    ->skip(4) 
    ->paginate(20); 

,使您的AJAX請求時,傳遞一個page值與請求無論是作爲POSTGET參數。

+0

我已閱讀文檔,但仍有點含糊不清。所以A)因爲我已經有4個最初的評論加載了,我如何在第一個4之後開始分頁? B)「頁面」值是否到位以確保它不會重新分頁相同的記錄? –

+0

您應該能夠在前4個結果後跳過(4)'開始分頁(我沒有應用任何排序,您可能需要)。我可能會誤解你的(b)問題 - 你需要維護分頁值。如果您將JSON返回到前端,則可以將其保留在父註釋,數據屬性或類似內容上。 – fubar

+0

我收到了以下錯誤:'儘管'使用Illuminate \ Pagination \ Paginator',但在485線上的Vendor/illuminate/database/Eloquent/Builder.php中找不到'PHP Illuminate \ Pagination \ Paginator'聲明在我的模型頂部 –

0

無論對你來說似乎都是最好的,無論如何解決你的問題。但一定不要從laravel領域脫身。但在我看來,這裏的Pagination的概念可以派上用場。它超級簡單,並帶有很多方法。

相關問題