php – 使用Eloquent的Laravel Chunk方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 使用Eloquent的Laravel Chunk方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2628字,纯文字阅读大概需要4分钟。
内容图文
![php – 使用Eloquent的Laravel Chunk方法](/upload/InfoBanner/zyjiaocheng/762/25450dd2b53b4d0890099fef1167e2f4.jpg)
为了处理大型数据库,laravel提供了块方法,如https://laravel.com/docs/5.1/queries#retrieving-results所示
但是如何在此查询中使用chunk方法,
$data = Inspector::latest('id')
->select('id', 'firstname', 'status', 'state', 'phone')
->where('firstname', 'LIKE', '%' . $searchtext . '%')
->get();
我正在返回这样的json响应,
echo json_encode($data);
有什么建议….
解决方法:
据我所知,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
}
});
此外,如果你要返回一个雄辩的对象,它将自动转换为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数据做什么以及如何通过ajax调用HTTP请求?为什么一次需要全部1000条记录?
如果你确实需要将1000的整个数据集发送到客户端,但一次只需要300个,那么你不想使用chunk.想想chunk()在eloquent的上下文中是什么,它不是为了让块一次返回一个块,直到它拥有整个数据集 – 它是用于将一个动作应用于一个块然后返回整个集合并且使用它的关键是它通过加载整个集来处理动作,一次不占用太多内存.
如果你想要逐位整个数据集并且分页对你的情况不起作用(我还没看到原因!)你将需要多次调用HTTP请求以逐位获取数据并在每个数据中指定请求你已经拥有的和你需要的东西.
内容总结
以上是互联网集市为您收集整理的php – 使用Eloquent的Laravel Chunk方法全部内容,希望文章能够帮你解决php – 使用Eloquent的Laravel Chunk方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。