这是我第一次在这里提问,请耐心等待,因为我不久前刚刚开始编码。 前阵子同事看到了我的代码
$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/