【发布时间】:2019-02-18 15:48:35
【问题描述】:
我想在 Laravel 迁移中有一些行的现有表中添加一个不可为空的列。 在 SQL 中,我理解这样的操作应该在事务中按顺序执行
- 添加列
- 初始化列
- 使其不可为空
以保证
- 在不破坏数据库完整性的情况下执行初始化,以及
-
ALTER TABLE不违反NOT NULL约束,
以下是PostgreSQL代码示例(假设users表有old_col列),参考an answer:
BEGIN TRANSACTION;
ALTER TABLE users ADD COLUMN new_col integer;
UPDATE users SET new_col = old_col + 1;
ALTER TABLE users ALTER COLUMN new_col SET NOT NULL;
COMMIT;
这样的普通 Laravel 迁移文件是行不通的。
public function up()
{
Schema::table('users', function($table) {
$table->integer('new_col'); // ->nullable(false) // later?
});
}
如何在 Laravel 迁移中实现 SQL 事务或其等价物?
注意(已编辑):
如果你想设置默认值,和如果你不需要(绝对同时)更新现有行的列作为每行的一些值的函数,那么你可以简单地指定->default(0) 或迁移文件中的类似内容(并避免所有技巧!)。我提出这个问题的目的不是为要添加的列设置默认值。
【问题讨论】:
标签: php sql laravel postgresql migration