如何在蓝图中重新定义列

时间:2019-05-28 14:53:26

标签: php laravel laravel-5 database-migration

背景

我正在尝试扩展类Blueprint来制作我的Blueprint。最后,我找到了方法。但是当我尝试覆盖某些ColumnDefinition时,遇到了一些麻烦阻止了我。

问题1

 Schema::create('Person',function(Blueprint $table){
    $table->string('id')->comment('身份证号');
    $table->string('id')->comment('学号')->change();//this line doesn't work!
});

像上面的代码一样,闭包的第二行不起作用,我也不知道为什么。

我知道有些“修改Cloumn”操作需要一个名为doctrine/dbal的依赖项,并且我已经安装了它。

函数change()既不报告任何错误,也不符合预期。这很奇怪。

请帮助我!

问题2

通过阅读Schema的源代码,我发现SchemaBlueprint之间的关系是Schema->Builder->BlueprintSchema::create()将调用$blueprint->create()Closure function(Blueprint $table)之前。无论是在Closure中定义字段还是直接在$blueprint->__constructor()中放入字段定义,都具有相同的效果。但是,当我运行{{1 }},migrate的{​​{1}}被多次调用。如果我将所有列定义都放在该Blueprint中,一切都很好。很奇怪!

而且,我还注意到constructor最终变成了Closure,为什么在创建像$table->unique()之前不编译命令。

目前,我相信Blueprint将列定义保存在数组alter table $table add unique中,最后将命令编译到create table $table(...,unique key $keyname (k1,k2,))中。如果是这样,为什么在创建表之前不支持覆盖?

0 个答案:

没有答案