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();
}
是否可以在迁移过程中转换 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();
}