php - 在 Laravel(或一般的 PHP)中使用查询作为循环数据

标签 php laravel

这是我第一次在这里提问,请耐心等待,因为我不久前刚刚开始编码。 前阵子同事看到了我的代码

$roles = new Roles();
foreach($roles->get as $role)
{
   ...irrelevant operation here
}

他评论说我将查询放入迭代中的方式是错误的,我应该将其更改为

$roles = $roles->get();
foreach($roles as $role)

他告诉我,如果我将查询作为数组表达式放入 foreach 循环中,它将在每个循环中引用数据库,最终降低整个站点的速度。我想知道这是否属实,以及其背后的逻辑。

最佳答案

$roles->get();打开数据库连接,进行查询,关闭连接。

每个到数据库的连接(通常)都是到另一个主机的 TCP 连接,如果你放入一个循环中,它会被调用 (n) 次。 您通过使每次迭代等待数据库连接来减慢循环速度。 如果您一次获取所有数据(例如使用 $roles->all()),它会将数据放入 RAM 中,并且不需要为每个项目调用 DB。

希望对你有帮助

关于php - 在 Laravel(或一般的 PHP)中使用查询作为循环数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36650882/

相关文章:

phpunit assertNull 损坏了 zend_mm_heap

php - jquery ui 选项卡和 php 回显数据

php - 多张图片上传、全部显示、全部拖放

laravel - 如何在 Laravel 中向多个收件人发送电子邮件?

php - 拉维尔 4.2 : Slow queries when using an external MySQL server

php - Laravel:PDO 类未找到错误

php - Dompdf 封装 laravel 中其他语言的支持

php - 无法配置 Notepad++ DBGP 插件。 Xdebug 已安装

php - 将 mysql 存储的点放在谷歌地图上

laravel - 部署时无法运行迁移。拉拉维尔 5.2