Laravel中的数据迁移

dan*_*990 1 php database-migration laravel

我们在表中有很多记录,我们需要在部署代码之前更新列的所有值.所以我们计划批量更新表,这里是代码的一个例子(实际的块大小要大得多).但是[BadMethodCallException] Method update does not exist.当我运行迁移时,我进入了块.我做错了什么?

class AlterContactsUpdateColumn extends Migration
{
    public function up()
    {
        DB::table('contacts')->chunk(100, function ($rows) {
            $rows->update(['is_valid' => true]);
        });
    }    
}
Run Code Online (Sandbox Code Playgroud)

Dev*_*von 6

$ rows将是100个stdClass对象的集合,因为:

  1. 你没有使用Eloquent.您正在使用查询构建器,因此您将无法使用模型来调用更新方法.

  2. Chunk将一个集合(而不是单个实例)注入回调.


如果你有一个名为Contact的Eloquent Model,你可以这样做:

    Contact::chunk(100, function ($rows) {
        $rows->each(function($contact) {
            $contact->update(['is_valid' => true]);
        });
    });
Run Code Online (Sandbox Code Playgroud)

或者可能效率更高,如果您只是更新每个联系人,则每个联系人运行一个查询而不是一个查询:

DB::table('contacts')->update(['is_valid' => true]);
Run Code Online (Sandbox Code Playgroud)