database - 是否有必要避免在 laravel 中更新模型的循环?
问题描述
我正在尝试根据字段对模型的多条记录进行排序,并将它们的排名存储在数据库中。如下所示:
$instances = Model::orderBy('field')->get();
$rank = 1;
foreach ($instances as $instance) {
$instance->update([
'rank' => $rank,
]);
$rank++;
}
我有两个问题:1-有没有其他方法可以避免使用循环?例如,我将排名放在一个数组中,并仅通过一种魔术方法更新整个记录。例如:
$instances = Model::orderBy('field')->get();
$rank = 1;
$ranks_array = array();
foreach ($instances as $instance) {
array_push($ranks_array, $rank);
$rank++;
}
$instances->magicMethod($ranks_array);
2-有必要这样做吗?循环是否对服务器有重大影响?需要说的是,我要更新的记录数可能根本不会超过 50 条。
解决方案
对于插入查询,一次插入所有记录将比逐个插入要快得多。但是对于更新查询,如果你需要用特定的数据更新特定的行,除了一一更新之外别无他法。
推荐阅读
- project-reactor - Project Reactor 的 Flux 能否一一处理消息
- java - WAR 文件在不同机器上编译时不起作用
- javascript - 在 Cytoscape.js 中使节点内的图像可点击
- ios - Swift Uiview 背景动画不起作用
- java - 无法为最终变量“weekTotalDaylyMinutes”赋值
- mysql - 在多台服务器上使用 mysql-server docker 容器创建 MySQL 集群
- c++ - 如果带有函数指针模板参数,则 constexpr 的虚假警告
- excel - 在 Excel VBA 中执行 GAMS
- shell - Crontab 不执行脚本,而是手动执行。macOS X
- c# - Xamarin Android 活动/片段没有被垃圾收集