Фон
Я пытаюсь расширить класс Blueprint, чтобы сделать мой Blueprint. Наконец, я нашел способ. Но когда я попытался перезаписать некоторое ColumnDefinition, некоторые проблемы остановили меня.
Задача 1
Schema::create('Person',function(Blueprint $table){
$table->string('id')->comment('身份证号');
$table->string('id')->comment('学号')->change();//this line doesn't work!
});
Как и в коде выше, вторая строка в этом замыкании не работает, и я не знаю почему.
Что я знаю, так это то, что некоторым операциям 'Modify Cloumn' нужна зависимость под названием doctrine/dbal
, и я ее установил.
Функция change()
не сообщает ни об ошибке, ни соответствует ожиданиям. Это странно.
Пожалуйста, помогите мне!
Задача 2
Читая исходный код Schema
, я обнаружил, что отношения между Schema
и Blueprint
равны Schema->Builder->Blueprint
. Schema::create()
вызовет $blueprint->create()
до Closure function(Blueprint $table)
. Кажется, что это тот же эффект, независимо от того, определяю ли я поля в Closure
или напрямую помещаю определения полей в $blueprint->__constructor()
. Но когда я запускаю migrate
, Blueprint
constructor
вызывается более одного раза. Если я поместите все определения столбцов в это Closure
, все в порядке. Странно!
И я также заметил, что $table->unique()
наконец становится alter table $table add unique
, почему бы не скомпилировать команду перед созданием, как create table $table(...,unique key $keyname (k1,k2,))
.
В настоящее время я считаю, что Blueprint сохраняет определения столбцов в массиве $commands[]
и, наконец, компилирует команды в sql
. Если так, то почему бы не поддерживать перезапись при создании таблицы?