Laravel 5 теперь поддерживает изменение столбца; Вот пример из официальной документации:
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
Источник: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 не поддерживает изменение столбцов, поэтому вам нужно использовать другой метод, такой как написание необработанной команды SQL. Например:
// getting Laravel App Instance
$app = app();
// getting laravel main version
$laravelVer = explode('.',$app::VERSION);
switch ($laravelVer[0]) {
// Laravel 4
case('4'):
DB::statement('ALTER TABLE `pro_categories_langs` MODIFY `name` VARCHAR(100) NULL;');
break;
// Laravel 5, or Laravel 6
default:
Schema::table('pro_categories_langs', function(Blueprint $t) {
$t->string('name', 100)->nullable()->change();
});
}
->nullable(false)
позволит вам снова изменить столбец.Вот полный ответ для будущего читателя. Обратите внимание, что это возможно только в Laravel 5+.
Прежде всего вам понадобится пакет doctrine / dbal :
Теперь в вашей миграции вы можете сделать это, чтобы сделать столбец обнуляемым:
Вы можете быть удивлены, как отменить эту операцию. К сожалению, этот синтаксис не поддерживается:
Это правильный синтаксис для возврата миграции:
Или, если хотите, вы можете написать необработанный запрос:
Надеюсь, вы найдете этот ответ полезным. :)
источник
nullable(false)
спас меня от выдергивания волос, потому чтоnullable()
это плохо документировано, и нет никакойnotNull()
функции.SET FOREIGN_KEY_CHECKS = 0
дает ошибку. вам, вероятно, потребуется изменить ограничения таблицы с помощью необработанного запроса. смотрите здесь: postgresql.org/docs/current/static/sql-altertable.htmlЯ предполагаю, что вы пытаетесь отредактировать столбец, к которому уже добавлены данные, поэтому удаление столбца и добавление его снова в качестве столбца, допускающего обнуление, невозможно без потери данных. Мы будем
alter
существующий столбец.Однако построитель схемы Laravel не поддерживает изменение столбцов, кроме переименования столбца. Таким образом, вам нужно будет выполнить необработанные запросы, чтобы сделать их, как это:
И чтобы убедиться, что вы все еще можете откатить миграцию, мы сделаем то же самое
down()
.Следует отметить, что, поскольку вы конвертируете между обнуляемыми и не обнуляемыми, вам необходимо убедиться, что вы очищаете данные до / после миграции. Так что сделайте это в вашем сценарии миграции двумя способами:
источник
query
наstatement
down
функции во втором блоке кода оператор SQL должен заканчиваться наNOT NULL
. (down
Функция в третьем примере правильная.)Он полный переход на Laravel 5 :
Дело в том, что вы можете удалить
nullable
, передавfalse
в качестве аргумента.источник
Если вам случится изменить столбцы и наткнулся на
тогда просто установите
composer require doctrine/dbal
источник
Добавление к ответу Дмитрия Чеботарева, как и для Laravel 5+.
После запроса пакета доктрина / dbal :
Затем вы можете выполнить миграцию с пустыми столбцами, например:
Чтобы отменить операцию, выполните:
источник
Добавление к Дмитрию Чеботареву Ответ,
Если вы хотите изменить несколько столбцов одновременно, вы можете сделать это, как показано ниже
источник
Попытайся:
источник
->change
в конце и упомянуть только Laravel 5+composer require doctrine/dbal
Для Laravel 4.2 ответ Unnawut выше является лучшим. Но если вы используете префикс таблицы, то вам нужно немного изменить свой код.
И чтобы убедиться, что вы все еще можете откатить миграцию, мы сделаем то же самое
down()
.источник