我想在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)
或迁移文件中的类似内容(并避免所有花招!)。我要问的目的不是为要添加的列设置默认值。
答案 0 :(得分:0)
您可以在foreach中编写代码,例如$ methodName ='item-> get'。$ method。'()';
课程项目{
getFoo(); ...
getBar(); ...
}
$ methods = ['Foo','Bar'];
foreach($ methods as $ method){
$ methodName ='item-> get'。$ method。'()';
echo $ methodName;
}