据我了解的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