我正在尝试扩展类Blueprint来制作我的Blueprint。最后,我找到了方法。但是当我尝试覆盖某些ColumnDefinition时,遇到了一些麻烦阻止了我。
Schema::create('Person',function(Blueprint $table){
$table->string('id')->comment('身份证号');
$table->string('id')->comment('学号')->change();//this line doesn't work!
});
像上面的代码一样,闭包的第二行不起作用,我也不知道为什么。
我知道有些“修改Cloumn”操作需要一个名为doctrine/dbal
的依赖项,并且我已经安装了它。
函数change()
既不报告任何错误,也不符合预期。这很奇怪。
请帮助我!
通过阅读Schema
的源代码,我发现Schema
和Blueprint
之间的关系是Schema->Builder->Blueprint
。Schema::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,))
中。如果是这样,为什么在创建表之前不支持覆盖?