对于处理大型数据库,laravel 提供了这里的块方法 https://laravel.com/docs/5.1/queries#retrieving-results
但是我怎样才能在这个查询中使用块方法,
$data = Inspector::latest('id')
->select('id', 'firstname', 'status', 'state', 'phone')
->where('firstname', 'LIKE', '%' . $searchtext . '%')
->get();
我在哪里返回这样的json响应,
echo json_encode($data);
有什么建议么….
原文由 Aamir 发布,翻译遵循 CC BY-SA 4.0 许可协议
据我了解,
chunk()
方法适用于您需要处理大型数据集并逐块对该数据块 执行操作 时使用。从您的问题来看,听起来您正在执行查询然后将数据作为 JSON 返回,所以对我来说,这听起来不像您正在对需要分块的数据集采取行动。
如果你想分解返回的 JSON 数据,你应该查看 pagination 。
您可以像这样将分页应用于您的查询:
您可以通过将数字传递给 paginate 方法来指定每个集合的大小:
如果我误解了并且您确实想要进行分块,我相信您可以执行以下操作:
此外,如果您要返回一个雄辩的对象,它将自动转换为 json,因此据我所知,您不需要执行
json_encode()
。编辑
如果我完全误解了你,你真正想做的是:
把它分成这个:
然后你想要
Collection
的块方法:请记住,在您获得查询结果之前,您没有使用
Collection
,因此如果您只是调用chunk()
它会期待一个回调,该回调将应用于整个数据集,当您使用Eloquent
。请参阅此处的
Collection
chunk()
方法的进一步阅读: https ://laravel.com/docs/5.3/collections#method-chunk否则…您能否为您实际在做的事情提供更多背景信息?听起来你真的需要分页。你在用 JSON 数据做什么,你是如何调用 HTTP 请求的,是通过 ajax 吗?为什么一次需要全部 1000 条记录?
如果您确实需要将 1000 个的整个数据集发送到客户端,但一次发送 300 个,那么您不想使用块。想想
chunk()
在 eloquent 的上下文中的用途,它不是为了让块一次返回一个块,直到它拥有整个数据集 - 它是为了对块应用一个动作然后返回整个集合和使用它的目的是通过加载整个集合来处理操作,一次不会占用太多内存。如果您希望逐位获取整个数据集并且分页不适用于您的情况(我还没有明白为什么!)您将需要多次调用 HTTP 请求以逐位获取数据并在每个请求你已经拥有的和你需要的。