Laravel一次更新多个记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel一次更新多个记录相关的知识,希望对你有一定的参考价值。

我有一个包含1000000条记录的mysql数据库表。我想更新每一行中的一列。

我试过了:

public function methodWorking()
{
    $properties = Property::with('requests')->get();
    foreach ($properties as $property) {
        $property->number_of_request = count($property->requests);
        $property->save();
    }
}

这个是有效的,但是在性能方面非常糟糕。

我想写一个这样的代码:

public function methodExpect()
{
    $properties = Property::with('requests')->get();
    $property_array = [];
    foreach ($properties as $property) {
        $property->number_of_request = count($property->requests);
        $property_array[] = $property;
    }

    Property::save($property_array);
}

是否可以使用laravel?

谢谢。

答案

据我所知,没有办法在MySQL的一个查询中进行批量更新。您可以在循环中使用某些内容,例如将Property::save($property_array);放入foreach中。

有关更多详细信息,请参阅this

另一答案

更改所有(或大多数)行通常表示架构设计较差。您想告诉我们该列包含哪些内容以及为什么需要进行大规模更改?

考虑从表中删除该列 - 然后以其他方式提供值。

是的,一百万行表的UPDATE需要很长时间。这是因为每行的旧副本都会保留,以防万一需要ROLLBACK

要把桌子分块,以可管理的方式进行,请参阅http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks

另一答案

你可以使用LaravelBatch它非常有用(在10 000条记录上测试)

以上是关于Laravel一次更新多个记录的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中一次更新多个列的值

如何在 Laravel 中将每个用户的数据库字段更新限制为 24 小时一次

Laravel migrate - 一次完成多个迁移(文件)

Laravel Array在多个记录上进行字符串转换

Laravel 更新密码通过验证但不更新记录

一次更新多行 Laravel Eloquent