我试图基于一个字段对一个模型的多个记录进行排序,并将它们的排名存储在DB中。如下所示:
$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。
答案 0 :(得分:1)
对于插入查询,一次插入所有记录的速度要比一次插入所有记录快得多。但是,对于更新查询,如果您需要使用特定数据更新特定行,则除了逐个更新它们之外,别无其他方法。