php - 获取与每一行有关系的大量行

标签 php mysql laravel

我在 documentation 中找到了 chunk 方法这有助于检索数以千计的记录。虽然,目前还不清楚获取相关模型的效率如何。现在我最好的尝试:

Student::chunk(100, function ($students){
      foreach ($students as $student){
          $student->with(['campus','program','group'])->get();
      };
});

这让我得到了 1996ms 的结果; 2009 次查询,其中 1996 次重复。 这是在一个测试环境中,我在 students 表中有 3500 行。

在产品环境中,它将超过 23k 行。如果模型 studentcampusesprogramsbelongsTo 关系,如何改进查询数据和 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 的提示显着减少了查询量,但仍然有一半是重复的:

enter image description here

最佳答案

我认为如果相反,你会过得更好:

Student::with(['campus','program','group'])->chunk(100, function ($students){
    // your logic here
});

要将所有数据发送到 Blade ,您可以将其累积在一个数组中并将其发送到 View 。

关于php - 获取与每一行有关系的大量行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59034965/

相关文章:

php - 什么是标准化的 UTF-8?

mysql - mysql中的where子句层次结构是什么

Laravel 护照 : How do i get Access token from Bearer Token

PHP/Laravel : Retrieve new info of Model after save()

php - 在 Ubuntu 16 上安装 PHP 7

php - Laravel Html::link 提供转义数据?

php - 如何避免使用 PHP cURL 进行 URL 通配?

php - MySQL/PHP多语言形式

php - 使用 PHP PDO 为每个 $_POST 插入行

php - 如何在 LARAVEL 中不使用 PHP 的 "compact"函数的情况下使用 View