如何解决Laravel Chunk 显示数千条数据记录?
我想显示数据库中的近一百条记录。但是这个过程非常缓慢。所以我尝试在刀片中添加一个块
这是我的控制器
$user= User::where('status','>=','2')->get();
这是我的 view.blade.php
@foreach($user->chunk(100) as $chunk)
@foreach ($chunk as $data)
<tr>
<td>{{$data->name}}</td>
<td>xxxx<td>
<tr>
@endforeach
@endforeach
但是我没有发现使用前和使用后块之间的区别。我知道我可以使用数据表 serverside/vajra/larawire。我也尝试分页,但搜索/排序功能不起作用,因为我使用数据表。
因为这个网站已经上线了。有什么短期解决方案吗?因为我计划在服务器端实现永久修复,但可以尽快完成。
如果我在控制器中像这样块
$user= User::select('status','date','id','name','xxx')->where('status','2')->orderBy('date_assign_fa','DESC')
->chunk(50,function($user) {
foreach ($users $user) {
**what i put in here if in im blade i also have foreach?**
}
});
解决方法
正如您所指出的,您在这种情况下使用的是关系: 您应该使用预先加载:
try (CSVReader reader = new CSVReader(new FileReader(file))) {
List<String[]> r = reader.readAll();
for(String[] x : r){
System.out.println(Arrays.toString(x));
}
}
https://laravel.com/docs/8.x/eloquent-relationships#eager-loading
你也可以做这样的事情来接收来自关系的特定列:
$user = User::with('Detail')->where('status','>=','2')->get();
这可能是所有性能问题的单一解决方案
旧答案
由于数组没有集合那么重,您可以尝试的一件事是:
$user = User::with([
'Detail' => function ($query) {
$query->select('column1','column2');
}
])->where('status','2')->get();
然后在您的视图中循环 $usersArray = [];
User::select('status','date','id','name','xxx')
->where('status','2')->orderBy('date_assign_fa','DESC')
->chunk(100,function($users) use ($usersArray) {
foreach ($users as $user) {
$usersArray[] = $user;
}
});
。
也可以更简单/更快地使用原始查询:
$usersArray
因为这将返回数组而不是集合,这应该使用更少的内存/处理器
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。