Как добавить тип столбца, допускающий значение NULL, в уже перенесенную таблицу

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

Примечание. Нет необработанных запросов sql или phpmyadmin. Ищем методы миграции.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
31
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

создайте новую миграцию и добавьте код ниже:

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

Это не вопрос о том, как обновить столбец вручную с помощью оператора SQL; это о миграции Laravel: laravel.com/docs/5.8/миграции

Tim Lewis 03.04.2019 19:40

Это не обновление вручную, это необработанный запрос, который вы можете запустить при миграции Laravel в Up() или Down()... lol

Lulceltech 03.04.2019 19:41

Это не то, как вы используете миграции.

Tim Lewis 03.04.2019 19:41

False, если вы запустите команду php artisan для миграции, она выдаст файл миграции с функциями up и down. Оттуда вы можете просто выполнить DB::select(DB::raw('') , который затем станет частью ваших миграций.

Lulceltech 03.04.2019 19:42

Опять же, это противоречит всему смыслу использования миграций. Существует синтаксис для изменения свойства столбца null, поэтому нет причин использовать такой необработанный оператор. Кроме того, использование необработанного оператора требует от вас знания используемой СУБД, в то время как миграции не зависят от SQL и адаптируются к используемому драйверу.

Tim Lewis 03.04.2019 19:44

И все же он работает точно так же и запускается так же, как и любая другая миграция, он отвечает на вопрос и предоставляет ему альтернативное решение.

Lulceltech 03.04.2019 19:45

Возможно, если бы в вашем ответе действительно был какой-то синтаксис PHP, это могло бы быть, но просто публикация необработанного оператора не отвечает на вопрос...

Tim Lewis 03.04.2019 19:46

Вам не нужно ничего кормить с ложки. Этот необработанный запрос можно включить в миграцию или запустить в редакторе БД. Вопрос был в том, что я что-то перенес, теперь мне нужно это настроить. Мы не говорили, используя другую миграцию, как мне это сделать.

Lulceltech 03.04.2019 19:48
Ответ принят как подходящий

Вы можете создать новую миграцию:

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 в терминале. Спасибо.

Braike dp 03.04.2019 20:01

Другие вопросы по теме