Laravel - 在迁移期间转换数据

Laravel - Transform data during migration

是否可以在迁移过程中转换 table 的数据?例如,我想添加一个新列,但默认值不足以用于现有数据(默认值适用于新记录,但现有数据已经​​具有需要放入新字段的结构).

我希望能够做这样的事情:

Schema::table('comments', function(Blueprint $table) {
    $table->unsignedInteger('level')->default(0);
    $table->text('lineage');
});

foreach (Comments::whereNotNull('parent_id')->get() as $c) {
    $c->level = $c->calculateLevel();
    $c->save();
}

这样'level'就不用按需计算了(如果是长评论树可以密集)

可以写一个命令来计算和保存这些级别值,但感觉应该迁移。

事实证明,我在示例中回答了我自己的问题。

更改架构后,您可以访问对象并使用新字段。

重复答案:

Schema::table('comments', function(Blueprint $table) {
    $table->unsignedInteger('level')->default(0);
    $table->text('lineage');
});

foreach (Comments::whereNotNull('parent_id')->get() as $c) {
    $c->level = $c->calculateLevel();
    $c->save();
}