Laravel中的数据迁移

时间:2018-04-13 20:54:47

标签: php laravel database-migration

我们在表中有很多记录,我们需要在部署代码之前更新列的所有值。所以我们计划批量更新表,这里是代码的一个例子(实际的块大小要大得多)。但是,当我运行迁移时,我在块中得到[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]);
        });
    }    
}

1 个答案:

答案 0 :(得分:6)

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

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

  2. Chunk会将一个集合而不是单个实例注入您的回调中。

  3. 如果您有一个名为Contact的

    的雄辩模型,您可以这样做
        Contact::chunk(100, function ($rows) {
            $rows->each(function($contact) {
                $contact->update(['is_valid' => true]);
            });
        });
    

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

    DB::table('contacts')->update(['is_valid' => true]);