據我瞭解的chunk()
方法是使用,當你需要一個大的數據集工作,由大塊採取對數據塊的操作。
從你的問題,這聽起來像你正在執行一個查詢,然後返回數據作爲JSON,所以對我來說,這聽起來不像你正在對你的數據集採取行動需要分塊。
如果你想分解返回的JSON數據,你應該看看pagination。
您可以應用分頁到您的查詢,像這樣:
$data = Inspector::latest('id')
->select('id', 'firstname', 'status', 'state', 'phone')
->where('firstname', 'LIKE', '%' . $searchtext . '%')
->paginate();
您可以指定每個傳遞一個號碼給PAGINATE方法集的大小:
$data = Inspector::latest('id')
->select('id', 'firstname', 'status', 'state', 'phone')
->where('firstname', 'LIKE', '%' . $searchtext . '%')
->paginate(25);
如果我誤解了而且你確實想要分塊,我相信你可以做到以下幾點:
$data = Inspector::latest('id')
->select('id', 'firstname', 'status', 'state', 'phone')
->where('firstname', 'LIKE', '%' . $searchtext . '%')
->chunk(50, function($inspectors) {
foreach ($inspectors as $inspector) {
// apply some action to the chunked results here
}
});
Al所以,如果你返回一個雄辯的對象,它會自動轉換爲json,所以你不需要執行json_encode()
據我所知。
編輯
如果我完全誤解你,你真正想要做的是這樣的:
{ 1000 records } -> this is the result of your query
把它分解成這樣:
{
{ 300 records},
{ 300 records},
{ 300 records},
{ 100 records},
}
那麼你一定要Collection
的組塊方法:
$data = Inspector::latest('id')
->select('id', 'firstname', 'status', 'state', 'phone')
->where('firstname', 'LIKE', '%' . $searchtext . '%')
->get() // now we're working with a collection
->chunk(300);
記住你不是一個Collection
工作,直到你得到的查詢結果,所以如果你只需要調用chunk()
就會想到一個回調,這將被應用到整個數據集,當您與Eloquent
工作。
見這裏的Collection
chunk()
方法這裏進一步閱讀:https://laravel.com/docs/5.3/collections#method-chunk
否則......你能不能給一些上下文你實際上在做什麼?這聽起來像你需要分頁。你對JSON數據做了什麼?你如何調用HTTP請求,是通過ajax?爲什麼一次需要全部1000條記錄?
如果您確實需要發送給客戶端的整個數據集1000,但一次只有300個數據集,那麼您不想使用塊。想想chunk()
在言語的上下文中的作用,它並不是讓數據塊一次返回到客戶端,直到它具有整個數據集 - 這是爲了對一個塊應用一個動作,然後返回整個集合和使用它的一點是,它不會佔用太多的內存在一次加載整個集處理的行動。
如果你希望整個數據集一點一點地分頁,對於你的情況不起作用(我還沒有明白爲什麼!),你將需要多次調用HTTP請求來逐個獲取數據並在每個請求中指定你已有的和你需要的。
我已經試過第三個答案,這是正確的,但我的問題是,如果我想要顯示1千條記錄,但它應該發送300條記錄。像第一個300,然後300,然後300,作爲JSON響應。但一次不會有一千個。 – Aamir
我爲你的努力向上提出了你的答案。 :) – Aamir
非常感謝..我現在有了這個概念。 :) – Aamir