У меня миграция с $table->datetime('published_at');
и он уже перенесен и данные заполнены. Теперь мне нужно сделать этот столбец ->nullable(), но без использования migrate:refresh или rollback. Как я могу добиться этого или это даже возможно.
Примечание. Нет необработанных запросов sql или phpmyadmin. Ищем методы миграции.






создайте новую миграцию и добавьте код ниже:
Schema::table('table_name', function (Blueprint $table) {
$table->string('published_at')->nullable()->change();
});
или при использовании mysql:
Вы можете изменить структуру своей таблицы прямо в phpmyadmin.
Перейдите в phpmyadmin -> таблица -> структура
отредактируйте столбец publishd_at и отметьте нуль
Простой способ - просто запустить такой запрос:
ALTER TABLE my_table MODIFY published_at DATETIME NULL
Это не обновление вручную, это необработанный запрос, который вы можете запустить при миграции Laravel в Up() или Down()... lol
Это не то, как вы используете миграции.
False, если вы запустите команду php artisan для миграции, она выдаст файл миграции с функциями up и down. Оттуда вы можете просто выполнить DB::select(DB::raw('') , который затем станет частью ваших миграций.
Опять же, это противоречит всему смыслу использования миграций. Существует синтаксис для изменения свойства столбца null, поэтому нет причин использовать такой необработанный оператор. Кроме того, использование необработанного оператора требует от вас знания используемой СУБД, в то время как миграции не зависят от SQL и адаптируются к используемому драйверу.
И все же он работает точно так же и запускается так же, как и любая другая миграция, он отвечает на вопрос и предоставляет ему альтернативное решение.
Возможно, если бы в вашем ответе действительно был какой-то синтаксис PHP, это могло бы быть, но просто публикация необработанного оператора не отвечает на вопрос...
Вам не нужно ничего кормить с ложки. Этот необработанный запрос можно включить в миграцию или запустить в редакторе БД. Вопрос был в том, что я что-то перенес, теперь мне нужно это настроить. Мы не говорили, используя другую миграцию, как мне это сделать.
Вы можете создать новую миграцию:
php artisan make:migration change_published_at_to_nullable
Это создаст новый файл миграции с именем
XXXX_YYY_ZZZ_000000_change_published_at_to_nullable.php
В этот файл миграции добавьте следующий код:
public function up(){
Schema::table("table", function (Blueprint $table) {
$table->string("published_at")->nullable()->change();
});
}
public function down(){
Schema::table("table", function (Blueprint $table) {
$table->string("published_at")->nullable(false)->change();
});
}
При выполнении команды php artisan migrate столбец published_at будет изменен, чтобы разрешить null. Если вам нужно изменить это, php artisan migrate:refresh, или php artisan migrate:reset, или php artisan migrate:rollback --step изменит столбец обратно, чтобы разрешить not null.
Это работает! Но сначала нужно запустить composer require doctrine/dbal в терминале. Спасибо.
Это не вопрос о том, как обновить столбец вручную с помощью оператора SQL; это о миграции Laravel: laravel.com/docs/5.8/миграции