php artisan migrate rollback step 1
9 Answers 9
I am afraid, you cannot do this directly.
You can: 1, Rollback The Last Migration Operation (all migrations ran in the last batch)
2, Rollback all migrations
3, Rollback all migrations and run them all again
In your situation, modify b.php and it’s up() method, then execute artisan migrate:refresh command.
There’s a way to hack it by manually editing the database. In the migrations table change the batch column by giving the last migration a different batch number. Be aware that they are in increasing order, so edit accordingly. This tracks which migrations were applied separately.
Then run artisan:rollback and it will undo the last «batch».
So if you want to separate them all, then start from the top and give each 1,2,3,4,5 and so on. You can see that it is easily scriptable, and you can make an artisan command if you wish to separate all your migrations.
In my experience. I never do migrate:rollback. I would usually create another migration that does all the changes i need to «undo/rollback» the previous migrations.
This way you can be flexible if you want to rollback 2-x steps back, you can just create a new migration to effect the changes you want and then run the new migration by php artisan migrate.
Laravel 5.3
With Laravel 5.3 there is no need for heavy scripting. As it allows to rollback given number of migrations.
Here’s the manual page for reference.
In fact, there is not this feature (yet). surprisingly
The best idea, is create a new file backtob.php and make its up call the down of your other migrate files. To avoid copy and paste, you can do something like this:
As you can see, you can create the up and down calling the up and down of those migrations what you want to revert.
It is not the ideal, but it is what we can do.
Создание модели и миграции в Laravel 8.x
Для начала, давайте немного обозначим, определение модели и файлов миграции. Известно, что Laravel является веб-фреймворком, работа которого основана на концепции MVC, широко известная в программировании. Согласно этой концепции, модели выполняют роль звена, между базой данных и непосредственно логикой работы контроллера. Посредством модели мы можем взаимодействовать с базой данных в объектно-ориентированном представлении.
Что касается миграции, то они в свою очередь имеют некоторую аналогию с системами контроля версий, только главное назначение их вносить изменения в базу данных. Таким образом, когда над проектом трудится несколько разработчиков, можно вносить изменения в схему БД веб-приложения, и делиться с другими разработчиками, через Git.
Давайте приступим к примеру создания модели и миграции. Но перед этим убедитесь, что у вас создана база данных и настроена в вашем проекте Laravel.
Создание модели
В Laravel модель представляет из себя класс PHP, с определёнными методами. Создавать этот класс удобно через терминал, посредством консоли artisan. Если вы хорошо разбираетесь в структуре, то можно создать вручную файл, и прописать в нём необходимый класс. Мы же будем использовать консоль, т.к. этот метод более предпочтительный и быстрый.
Переходим в терминал, в папку с проектом Laravel, и выполняем команду:
Где «Contact» — это название модели, а параметр «-m» позволит создать файл миграции. По умолчанию, файлы моделей создаются в папке /app.
Содержимое файла модели будет выглядеть следующим образом:
Laravel позволяет хранить файлы моделей где угодно, по этой причине, можно завести для файлов моделей отдельную папку.
Модели в отдельной директории
Давайте создадим папку /app/models, в которой будут храниться все модели проекта. Соответственно в эту папку необходимо будет перевести файл модели.
Старый путь: /app/Contact.php
По новому пути: /app/models/Contact.php
Кроме того, после изменения расположения файла, в коде самого файла следует поменять значение namespace. Выглядеть оно будет следующим образом:
На этом создание файла модели завершено, теперь давайте перейдём к файлу миграции.
Файлы миграции
Файл миграции был создан в директории /database/migrations/. В этой папке будут находиться все файлы миграций, которые есть в проекте.
Пример содержимого файла миграций:
В этом файле есть два ключевых метода это up() – вызывается при запуске миграции, и down() – вызывается при отмене миграции.
Как вы можете заметить, в методе up(), посредством Schema::create() создаётся таблица «contacts» и указываются поля, которые будут созданы при миграции. В методе down() мы удаляем таблицу «contacts», посредством Schema::dropIfExists().
Запуск миграции выполняется в консоли, посредством команды:
Чтобы вернуть миграцию на один шаг назад:
Чтобы отменить миграцию на 3 шага назад:
Чтобы отменить все миграции:
Процесс миграции можно отменять и по шагам, это позволяет более удобно работать со схемами таблиц при разработке.
Исправление ошибок миграции
При попытке выполнить миграцию, вы можете получить такую ошибку:
Specified key was too long error
Laravel Framework Russian Community
Пролог
Начало работы
Основы архитектуры
Основы
Фронтенд
Безопасность
Копаем глубже
База данных
Eloquent ORM
Тестирование
Официальные пакеты
База данных: Миграции
Введение
Миграции — что-то вроде системы контроля версий для вашей базы данных. Они позволяют вашей команде изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с построителем структур для более простого обращения с архитектурой вашей базы данных. Если вы когда-нибудь просили коллегу вручную добавить столбец в его локальную БД, значит вы сталкивались с проблемой, которую решают миграции БД.
Фасад Laravel Schema обеспечивает поддержку создания и изменения таблиц в независимости от используемой СУБД из числа тех, что поддерживаются в Laravel.
Создание миграций
Для создания новой миграции используйте Artisan-команду make:migration :
Структура миграций
В обоих методах вы можете использовать построитель структур Laravel для удобного создания и изменения таблиц. О всех доступных методах построителя структур Schema читайте в его доументации. Например, эта миграция создаёт таблицу flights :
Выполнение миграций
Для запуска всех необходимых вам миграций используйте Artisan-команду migrate :
Если вы используете виртуальную машину Homestead, вам надо выполнить эту команду на своей ВМ.
Принудительные миграции в продакшне
Откат миграций
Команда migrate:reset откатит изменения всех миграций вашего приложения:
Откат всех миграций и их повторное применение одной командой
Таблицы
Создание таблиц
Само собой, при создании таблицы вы можете использовать любые методы для работы со столбцами построителя структур.
Проверка существования таблицы / столбца
Вы можете легко проверить существование таблицы или столбца при помощи методов hasTable и hasColumn :
Подключение и подсистема хранения данных
Если вы хотите выполнить операции над структурой через подключение к БД, которое не является вашим основным подключением, используйте метод connection :
Используйте свойство engine построителя структур, чтобы задать подсистему хранения данных для таблицы:
Переименование / удаление таблиц
Для переименования существующей таблицы используйте метод rename :
Для удаления существующей таблицы используйте методы drop или dropIfExists :
Переименование таблиц с внешними ключами
Перед переименованием таблицы вы должны проверить, что для всех ограничений внешних ключей таблицы есть явные имена в файлах вашей миграции, чтобы избежать автоматического назначения имён на основе принятого соглашения. Иначе имя ограничения внешнего ключа будет ссылаться на имя старой таблицы.
Столбцы
Создание столбцов
Доступные типы столбцов
Разумеется, построитель структур содержит различные типы столбцов, которые вы можете указывать при построении ваших таблиц:
Модификаторы столбцов
Вдобавок к перечисленным типам столбцов существует несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбцов в таблицу. Например, чтобы сделать столбец «обнуляемым», используйте метод nullable :
Ниже перечислены все доступные модификаторы столбцов. В этом списке отсутствуют модицикаторы индексов:
Модификатор | Описание |
---|---|
->after(‘column’) | Помещает столбец «после» указанного столбца (только MySQL) |
->comment(‘my comment’) | Добавляет комментарий в столбец |
->default($value) | Указывает значение «по умолчанию» для столбца |
->first() | Помещает столбец «первым» в таблице (только MySQL) |
->nullable() | Разрешает вставлять значения NULL в столбец |
->storedAs($expression) | Создать генерируемый столбец типа stored (только MySQL) |
->unsigned() | Делает столбцы integer беззнаковыми UNSIGNED |
->virtualAs($expression) | Создать генерируемый столбец типа virtual (только MySQL) |
Изменение столбцов
Требования
Изменение атрибутов столбца
Метод change позволяет изменить тип существующего столбца или изменить его атрибуты. Например, если вы захотите увеличить размер строкового столбца name с 25 до 50:
Также мы можем изменить столбец, чтобы он могу иметь значения NULL:
Столбы следующих типов нельзя «изменить»: char, double, enum, mediumInteger, timestamp, tinyInteger, ipAddress, json, jsonb, macAddress, mediumIncrements, morphs, nullableMorphs, nullableTimestamps, softDeletes, timeTz, timestampTz, timestamps, timestampsTz, unsignedMediumInteger, unsignedTinyInteger, uuid.
Переименование столбцов
Для переименования столбца используйте метод renameColumn на построителе структур. Перед переименованием столбца добавьте зависимость doctrine/dbal в свой файл composer.json :
Удаление столбцов
Для удаления столбца используйте метод dropColumn на построителе структур. Перед удалением столбцов из базы данных SQLite вам необходимо добавить зависимость doctrine/dbal в ваш файл composer.json и выполнить команду composer update для установки библиотеки:
Вы можете удалить несколько столбцов таблицы, передав массив их имён в метод dropColumn :
Удаление и изменение нескольких столбцов одной миграцией не поддерживается для базы данных SQLite.
Индексы
Создание индексов
Построитель структур поддерживает несколько типов индексов. Сначала давайте посмотрим на пример, в котором задаётся, что значения столбца должны быть уникальными. Для создания индекса мы можем просто сцепить метод unique с определением столбца:
Другой вариант — создать индекс после определения столбца. Например:
Вы можете даже передать массив столбцов в метод индексирования для создания сложного индекса:
Laravel автоматически генерирует подходящее имя индекса, но вы можете передать своё значение вторым аргументом метода:
Доступные типы индексов
Команда | Описание |
---|---|
$table->primary(‘id’); | Добавление первичного ключа. |
$table->primary([‘first’, ‘last’]); | Добавление составных ключей. |
$table->unique(’email’); | Добавление уникального индекса. |
$table->unique(‘state’, ‘my_index_name’); | Добавление пользовательского имени индекса. |
$table->unique([‘first’, ‘last’]); | Добавление составного уникального индекса. |
$table->index(‘state’); | Добавление базового индекса. |
Длина индексов и MySQL / MariaDB
Или же, вы можете включить опцию innodb_large_prefix для своей базы данных. См. документацию своей базы данных для получения инструкций о том, как правильно включить данную опцию.
Удаление индексов
Для удаления индекса необходимо указать его имя. По умолчанию Laravel автоматически назначает имена индексам. Просто соедините имя таблицы, имя столбца-индекса и тип индекса. Ниже приведено несколько примеров:
Команда | Описание |
---|---|
$table->dropPrimary(‘users_id_primary’); | Удаление первичного ключа из таблицы «users». |
$table->dropUnique(‘users_email_unique’); | Удаление уникального индекса из таблицы «users». |
$table->dropIndex(‘geo_state_index’); | Удаление базового индекса из таблицы «geo». |
Если вы передадите массив столбцов в метод для удаления индексов, будет сгенерировано стандартное имя индекса на основе имени таблицы, столбца и типа ключа:
Ограничения внешнего ключа
Вы также можете указать требуемое действие для свойств ограничений «on delete» и «on update»:
Либо вы можете передать значение массива, при этом для удаления будет автоматически использовано стандартное имя ограничения:
Вы можете включить или выключить ограничения внешнего ключа в своих миграциях с помощью следующих методов:
Laravel 8 · База данных · Миграции
Введение
Миграции похожи на контроль версий для вашей базы данных, позволяют вашей команде определять схемы базы данных приложения и совместно использовать их определение. Если вам когда-либо приходилось указывать товарищу по команде вручную добавить столбец в его схему локальной базы данных после применения изменений в системе управления версиями, то вы столкнулись с проблемой, которую решает миграция базы данных.
Фасад Schema обеспечивает независимую от базы данных поддержку для создания и управления таблицами во всех поддерживаемых Laravel системах баз данных. В обычной ситуации, этот фасад используется для создания и изменения таблиц / столбцов базы данных во время миграции.
Генерация миграций
Чтобы сгенерировать новую миграцию базы данных, используйте команду make:migration Artisan. Эта команда поместит новый класс миграции в каталог database/migrations вашего приложения. Каждое имя файла миграции содержит временную метку, которая позволяет Laravel определять порядок применения миграций:
Laravel будет использовать имя миграции, чтобы попытаться угадать имя таблицы и будет ли миграция создавать новую таблицу. Если Laravel может определить имя таблицы по имени миграции, то сгенерированный файл миграции будет предварительно заполнен указанной таблицей. В противном случае вы можете просто вручную указать таблицу в файле миграции.
Сжатие миграций
По мере создания приложения вы можете со временем накапливать все больше и больше миграций. Это может привести к тому, что ваш каталог database/migrations станет раздутым из-за потенциально сотен миграций. Если хотите, то можете «сжать» свои миграции в один файл SQL. Для начала выполните команду schema:dump :
Когда вы выполните эту команду, Laravel запишет файл «схемы» в каталог database/schema вашего приложения. Теперь, когда вы попытаетесь перенести свою базу данных, Laravel сначала выполнит SQL-операторы файла схемы, при условии, что никакие другие миграции не выполнялись. После выполнения команд файла схемы, Laravel выполнит все оставшиеся миграции, которые не были включены в дамп схемы БД.
Вы должны передать файл схемы базы данных в систему управления версиями, чтобы другие новые разработчики в вашей команде могли быстро воссоздать исходную структуру базы данных вашего приложения.
Сжатие миграции доступно только для баз данных MySQL, PostgreSQL и SQLite и использует клиент командной строки базы данных. Дампы схемы не могут быть восстановлены в базах данных SQLite, хранимых в памяти.
Структура миграций
Указание соединения миграции
Запуск миграций
Чтобы запустить все незавершенные миграции, выполните команду migrate Artisan:
Если вы хотите узнать, какие миграции уже выполнены, то вы можете использовать команду migrate:status Artisan:
Принудительный запуск миграции в рабочем окружении
Откат миграций
Чтобы откатить последнюю операцию миграции, вы можете использовать команду rollback Artisan. Эта команда откатывает последний «пакет» миграций, который может включать несколько файлов миграции:
Команда migrate:reset откатит все миграции вашего приложения:
Откат и миграция с помощью одной команды
Удаление всех таблиц с последующей миграцией
Команда migrate:fresh удалит все таблицы из базы данных, а затем выполнит команду migrate :
Команда migrate:fresh удалит все таблицы базы данных независимо от их префикса. Эту команду следует использовать с осторожностью при разработке в базе данных, которая используется совместно с другими приложениями.
Таблицы
Создание таблиц
При создании таблицы вы можете использовать любой из методов столбцов построителя схемы для определения столбцов таблицы.
Проверка наличия таблицы / столбца
Соединение с базой данных и параметры таблицы
Если вы хотите выполнить операцию схемы с подключением, которое не является подключением к базе данных по умолчанию для вашего приложения, используйте метод connection :
Кроме того, некоторые другие свойства и методы могут использоваться для определения других аспектов создания таблицы. Свойство engine используется для указания механизма хранения таблицы при использовании MySQL:
Свойства charset и collation могут использоваться для указания набора символов и сопоставления для создаваемой таблицы при использовании MySQL:
Метод temporary используется, чтобы указать, что таблица должна быть «временной». Временные таблицы видны только текущему сеансу соединения базы данных и автоматически удаляются при закрытии соединения:
Обновление таблиц
Переименование / удаление таблиц
Чтобы переименовать существующую таблицу базы данных, используйте метод rename :
Чтобы удалить существующую таблицу, вы можете использовать методы drop или dropIfExists :
Переименование таблиц с внешними ключами
Перед переименованием таблицы вы должны убедиться, что любые ограничения внешнего ключа в таблице имеют явное имя в ваших файлах миграции, вместо того, чтобы позволять Laravel назначать имя на основе соглашения. В противном случае, имя ограничения внешнего ключа будет ссылаться на имя старой таблицы.
Столбцы
Создание столбцов
Доступные типы столбцов
Построитель схем Blueprint предлагает множество методов, соответствующих различным типам столбцов, которые вы можете добавить в таблицы базы данных. Все доступные методы перечислены в таблице ниже:
bigIncrements()
Метод bigIncrements создает эквивалент автоинкрементного столбца UNSIGNED BIGINT (первичный ключ):
bigInteger()
Метод bigInteger создает эквивалент столбца BIGINT :
binary()
Метод binary создает эквивалент столбца BLOB :
boolean()
Метод boolean создает эквивалент столбца BOOLEAN :
Метод char создает эквивалент столбца CHAR указанной длины:
dateTimeTz()
Метод dateTimeTz создает эквивалент столбца DATETIME (с часовым поясом) с необязательной точностью (общее количество цифр):
dateTime()
Метод dateTime создает эквивалент столбца DATETIME с необязательной точностью (общее количество цифр):
Метод date создает эквивалент столбца DATE :
decimal()
Метод decimal создает эквивалент столбца DECIMAL с точностью (общее количество цифр) и масштабом (десятичные цифры):
double()
Метод double создает эквивалент столбца DOUBLE с точностью (общее количество цифр) и масштабом (десятичные цифры):
Метод enum создает эквивалент столбца ENUM с указанием допустимых значений:
float()
Метод float создает эквивалент столбца FLOAT с точностью (общее количество цифр) и масштабом (десятичные цифры):
foreignId()
Метод foreignId является псевдонимом метода unsignedBigInteger :
geometryCollection()
Метод geometryCollection создает эквивалент столбца GEOMETRYCOLLECTION :
geometry()
Метод geometry создает эквивалент столбца GEOMETRY :
increments()
Метод increments создает эквивалент автоинкрементного столбца UNSIGNED INTEGER в качестве первичного ключа:
integer()
Метод integer создает эквивалент столбца INTEGER :
ipAddress()
Метод ipAddress создает эквивалент столбца INTEGER :
Метод json создает эквивалент столбца JSON :
jsonb()
Метод jsonb создает эквивалент столбца JSONB :
lineString()
Метод lineString создает эквивалент столбца LINESTRING :
longText()
Метод longText создает эквивалент столбца LONGTEXT :
macAddress()
Метод macAddress создает столбец, предназначенный для хранения MAC-адреса. Некоторые системы баз данных, такие как PostgreSQL, имеют специальный тип столбца для этого типа данных. Другие системы баз данных будут использовать столбец строкового эквивалента:
mediumIncrements()
Метод mediumIncrements создает эквивалент автоинкрементного столбца UNSIGNED MEDIUMINT в качестве первичного ключа:
mediumInteger()
Метод mediumInteger создает эквивалент столбца MEDIUMINT :
mediumText()
Метод mediumText создает эквивалент столбца MEDIUMTEXT :
morphs()
Метод morphs – это удобный метод, который добавляет эквивалент столбца UNSIGNED BIGINT (
Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения Eloquent. В следующем примере будут созданы столбцы taggable_id и taggable_type :
multiLineString()
Метод multiLineString создает эквивалент столбца MULTILINESTRING :
multiPoint()
Метод multiPoint создает эквивалент столбца MULTIPOINT :
multiPolygon()
Метод multiPolygon создает эквивалент столбца MULTIPOLYGON :
nullableTimestamps()
Метод аналогичен методу timestamps ; тем не менее, создаваемый столбец будет иметь значение NULL:
nullableMorphs()
Метод аналогичен методу morphs ; тем не менее, создаваемый столбец будет иметь значение NULL:
nullableUuidMorphs()
Метод аналогичен методу uuidMorphs ; тем не менее, создаваемый столбец будет иметь значение NULL:
point()
Метод point создает эквивалент столбца POINT :
polygon()
Метод polygon создает эквивалент столбца POLYGON :
rememberToken()
Метод set создает эквивалент столбца SET с заданным списком допустимых значений:
smallIncrements()
Метод smallIncrements создает эквивалент автоинкрементного столбца UNSIGNED SMALLINT в качестве первичного ключа:
smallInteger()
Метод smallInteger создает эквивалент столбца SMALLINT :
softDeletesTz()
softDeletes()
string()
Метод string создает эквивалент столбца VARCHAR указанной длины:
Метод text создает эквивалент столбца TEXT :
timeTz()
Метод timeTz создает эквивалент столбца TIME (с часовым поясом) с необязательной точностью (общее количество цифр):
Метод time создает эквивалент столбца TIME с необязательной точностью (общее количество цифр):
timestampTz()
Метод timestampTz создает эквивалент столбца TIMESTAMP (с часовым поясом) с необязательной точностью (общее количество цифр):
timestamp()
Метод timestamp создает эквивалент столбца TIMESTAMP с необязательной точностью (общее количество цифр):
timestampsTz()
timestamps()
Метод timestamps method creates created_at and updated_at TIMESTAMP с необязательной точностью (общее количество цифр):
tinyIncrements()
Метод tinyIncrements создает эквивалент автоинкрементного столбца UNSIGNED TINYINT в качестве первичного ключа:
tinyInteger()
Метод tinyInteger создает эквивалент столбца TINYINT :
unsignedBigInteger()
Метод unsignedBigInteger создает эквивалент столбца UNSIGNED BIGINT :
unsignedDecimal()
Метод unsignedDecimal создает эквивалент столбца UNSIGNED DECIMAL с необязательной точностью (общее количество цифр) и масштабом (десятичные цифры):
unsignedInteger()
Метод unsignedInteger создает эквивалент столбца UNSIGNED INTEGER :
unsignedMediumInteger()
Метод unsignedMediumInteger создает эквивалент столбца UNSIGNED MEDIUMINT :
unsignedSmallInteger()
Метод unsignedSmallInteger создает эквивалент столбца UNSIGNED SMALLINT :
unsignedTinyInteger()
Метод unsignedTinyInteger создает эквивалент столбца UNSIGNED TINYINT :
uuidMorphs()
Метод uuidMorphs – это удобный метод, который добавляет эквивалент столбца CHAR(36) (
Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения Eloquent, использующего идентификаторы UUID. В следующем примере будут созданы столбцы taggable_id и taggable_type :
Метод uuid создает эквивалент столбца UUID :
Метод year создает эквивалент столбца YEAR :
Модификаторы столбца
В дополнение к типам столбцов, перечисленным выше, есть несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбца в таблицу базы данных. Например, чтобы сделать столбец «допускающим значение NULL», вы можете использовать метод nullable :
В следующей таблице представлены все доступные модификаторы столбцов. В этот список не входят модификаторы индексов:
Модификатор | Описание |
---|---|
->after(‘column’) | Поместить столбец «после» другого столбца (MySQL). |
->autoIncrement() | Установить столбцы INTEGER как автоинкрементные (первичный ключ). |
->charset(‘utf8mb4’) | Указать набор символов для столбца (MySQL). |
->collation(‘utf8mb4_unicode_ci’) | Указать параметры сравнения для столбца (MySQL/PostgreSQL/SQL Server). |
->comment(‘my comment’) | Добавить комментарий к столбцу (MySQL/PostgreSQL). |
->default($value) | Указать значение «по умолчанию» для столбца. |
->first() | Поместить столбец «первым» в таблице (MySQL). |
->from($integer) | Установить начальное значение автоинкрементного поля (MySQL / PostgreSQL). |
->nullable($value = true) | Позволить (по умолчанию) значения NULL для вставки в столбец. |
->storedAs($expression) | Создать сохраненный генерируемый столбец (MySQL). |
->unsigned() | Установить столбцы INTEGER как UNSIGNED (MySQL). |
->useCurrent() | Установить столбцы TIMESTAMP для использования CURRENT_TIMESTAMP в качестве значения по умолчанию. |
->useCurrentOnUpdate() | Установить столбцы TIMESTAMP для использования CURRENT_TIMESTAMP при обновлении записи. |
->virtualAs($expression) | Создать виртуальный генерируемый столбец (MySQL). |
->generatedAs($expression) | Создать столбец идентификаторов с указанными параметрами последовательности (PostgreSQL). |
->always() | Определить приоритет значений последовательности над вводом для столбца идентификаторов (PostgreSQL). |
Выражения для значений по умолчанию
Поддержка выражений по умолчанию зависит от вашего драйвера базы данных, версии базы данных и типа поля. См. документацию к вашей базе данных.
Порядок столбцов
Метод after добавляет набор столбцов после указанного существующего столбца в схеме базы данных MySQL:
Изменение столбцов
Необходимые компоненты
Перед изменением столбца вы должны установить пакет doctrine/dbal с помощью менеджера пакетов Composer. Библиотека Doctrine DBAL используется для определения текущего состояния столбца и для создания запросов SQL, необходимых для внесения запрошенных изменений в столбец:
Обновление атрибутов столбца
Метод change позволяет вам изменять тип и атрибуты существующих столбцов. Например, вы можете увеличить размер string столбца. Чтобы увидеть метод change в действии, давайте увеличим размер столбца name до 50. Для этого мы просто определяем новое состояние столбца и затем вызываем метод change :
Мы также можем изменить столбец, чтобы он допускал значение NULL:
Переименование столбцов
Чтобы переименовать столбец, вы можете использовать метод renameColumn построителя схемы Blueprint. Перед переименованием столбца убедитесь, что вы установили библиотеку doctrine/dbal через менеджер пакетов Composer:
Переименование enum столбца в настоящее время не поддерживается.
Удаление столбцов
Чтобы удалить столбец, вы можете использовать метод dropColumn построителя схемы Blueprint. Если ваше приложение использует базу данных SQLite, то вы должны установить библиотеку doctrine/dbal через менеджер пакетов Composer, прежде чем использовать метод dropColumn :
Вы можете удалить несколько столбцов из таблицы, передав массив имен столбцов методу dropColumn :
Удаление или изменение нескольких столбцов в рамках одной миграции при использовании базы данных SQLite не поддерживается.
Доступные псевдонимы команд
Laravel содержит несколько удобных методов, связанных с удалением общих типов столбцов. Каждый из этих методов описан в таблице ниже:
Индексы
Создание индексов
Построитель схем Laravel поддерживает несколько типов индексов. В следующем примере создается новый столбец email и указывается, что его значения должны быть уникальными. Чтобы создать индекс, мы можем связать метод unique с определением столбца:
В качестве альтернативы вы можете создать индекс после определения столбца. Для этого вы должны вызвать метод unique построителя схемы Blueprint. Этот метод принимает имя столбца, который должен получить уникальный индекс:
Вы даже можете передать массив столбцов методу индекса для создания составного индекса:
При создании индекса Laravel автоматически сгенерирует имя индекса на основе таблицы, имен столбцов и типа индекса, но вы можете передать второй аргумент методу, чтобы указать имя индекса самостоятельно:
Доступные типы индексов
Построитель схем Laravel содержит методы для создания каждого типа индекса, поддерживаемого Laravel. Каждый метод индекса принимает необязательный второй аргумент для указания имени индекса. Если не указано, то имя будет производным от имен таблицы и столбцов, используемых для индекса, а также типа индекса. Все доступные методы индекса описаны в таблице ниже:
Команда | Описание |
---|---|
$table->primary(‘id’); | Добавить первичный ключ. |
$table->primary([‘id’, ‘parent_id’]); | Добавить составной ключ. |
$table->unique(’email’); | Добавить уникальный индекс. |
$table->index(‘state’); | Добавляет простой индекс. |
$table->spatialIndex(‘location’); | Добавляет пространственный индекс (кроме SQLite). |
Длина индекса и MySQL / MariaDB
Кроме того, вы можете включить опцию innodb_large_prefix для своей базы данных. Обратитесь к документации вашей базы данных для получения инструкций о том, как правильно включить эту опцию.
Переименование индексов
Чтобы переименовать индекс, вы можете использовать метод renameIndex построителя схемы Blueprint. Этот метод принимает текущее имя индекса в качестве первого аргумента и желаемое имя в качестве второго аргумента:
Удаление индексов
Чтобы удалить индекс, вы должны указать имя индекса. По умолчанию Laravel автоматически назначает имя индекса на основе имени таблицы, имени индексированного столбца и типа индекса. Вот некоторые примеры:
Если вы передадите массив столбцов в метод, удаляющий индексы, то обычное имя индекса будет сгенерировано на основе имени таблицы, столбцов и типа индекса:
Ограничения внешнего ключа
Поскольку этот синтаксис довольно подробный, Laravel предлагает дополнительные, более сжатые методы, использующие соглашения, для повышения продуктивности разработки. Пример выше можно переписать так:
Вы также можете указать желаемое действие для свойств ограничения «при удалении» и «при обновлении»:
Любые дополнительные модификаторы столбца должны быть вызваны перед методом constrained :
Удаление внешних ключей
Переключение ограничений внешнего ключа
Вы можете включить или отключить ограничения внешнего ключа в своих миграциях, используя следующие методы:
SQLite по умолчанию отключает ограничения внешнего ключа. При использовании SQLite убедитесь, что включили поддержку внешнего ключа в вашей конфигурации базы данных, прежде чем пытаться создать их в ваших миграциях. Кроме того, SQLite поддерживает внешние ключи только при создании, а не при изменении таблиц.