我在 documentation 中找到了 chunk
方法这有助于检索数以千计的记录。虽然,目前还不清楚获取相关模型的效率如何。现在我最好的尝试:
Student::chunk(100, function ($students){
foreach ($students as $student){
$student->with(['campus','program','group'])->get();
};
});
这让我得到了 1996ms 的结果; 2009 次查询,其中 1996 次重复
。
这是在一个测试环境中,我在 students
表中有 3500 行。
在产品环境中,它将超过 23k 行。如果模型 student
与 campuses
、programs
有 belongsTo
关系,如何改进查询数据和 groups
表?
Student.php
public function campus()
{
return $this->belongsTo(Campus::class);
}
public function program()
{
return $this->belongsTo(Program::class);
}
public function group()
{
return $this->belongsTo(Group::class);
}
第二个问题是,如何将数据发送到 Blade 服务器? 我想只是把它放在一个变量而不是解决方案中,因为变量可能会耗尽内存......或者我错了?
更新: @Pavel Lint 的提示显着减少了查询量,但仍然有一半是重复的:
最佳答案
我认为如果相反,你会过得更好:
Student::with(['campus','program','group'])->chunk(100, function ($students){
// your logic here
});
要将所有数据发送到 Blade ,您可以将其累积在一个数组中并将其发送到 View 。
关于php - 获取与每一行有关系的大量行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59034965/