как переопределить столбец в Blueprint - PullRequest
0 голосов
/ 28 мая 2019

Фон

Я пытаюсь расширить класс 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. Если так, то почему бы не поддерживать перезапись при создании таблицы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...