首页 > 解决方案 > 是否有必要避免在 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 条。

标签: databaselaravelloops

解决方案


对于插入查询,一次插入所有记录将比逐个插入要快得多。但是对于更新查询,如果你需要用特定的数据更新特定的行,除了一一更新之外别无他法。


推荐阅读