laravel php artisan migrate

Миграции и начальные данные

Введение

Миграции — что-то вроде системы контроля версий для вашей базы данных. Они позволяют команде изменять её структуру, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с построителем структур для более простого обращения с архитектурой вашего приложения.

Создание миграций

Для создания новой миграции вы можете использовать команду migrate:make командного интерфейса Artisan:

Миграция будет помещена в папку app/database/migrations и будет содержать текущее время, которое позволяет библиотеке определять порядок применения миграций.

Применение миграций

Накатывание всех неприменённых миграций

Накатывание новых миграций в указанной папке

Накатывание новых миграций для пакета

Принудительные миграции в работающем приложении

Откат миграций

Отмена изменений последней миграции

Отмена изменений всех миграций

Откат всех миграций и их повторное применение

Загрузка начальных данных в БД

Примерные классы для загрузки начальных данных

Для добавления данных в БД используйте команду db:seed Artisan:

Либо вы можете сделать это командой migrate:refresh, которая также откатит и заново применит все ваши миграции:

Источник

Laravel Framework Russian Community

Введение (Introduction)

Миграции похожи на систему контроля версиий, но только для базы данных (БД). Они позволяют команде разработчиков легко изменять схему БД приложения и делиться этими изменениями. Миграции обычно связаны с построителем схем Laravel (Laravel’s schema builder) для облегчения создания схемы БД приложения.

Laravel Schema facade предоставляет независимую от БД поддержку создания и управления таблицами. Она предоставляет выразительный API для всех поддерживаемых Laravel БД.

Создание (Generating Migrations)

Для создания миграции используйте make:migration Artisan command:

Структура миграции (Migration Structure)

Внутри обоих методов вы можете использовать конструктор схем для создания и модификации таблиц. Для изучения всех методов, доступных в конструкторе, обратитесь к документации check out its documentation. Давайте взглянем на пример миграции, которая создает таблицу flights :

Запуск миграций (Running Migrations)

Если вы получили сообщение об ошибке «class not found» во время запуска, попробуйте выполнить команду composer dump-autoload и потом вновь выполнить миграцию.

Принудительные миграции на продакшене (Forcing Migrations To Run In Production)

Некоторые операции миграции могут привести к потере данных. В целях защиты от запуска таких команд у вас будет запрашиваться подтверждение перед их выполнением. Для выполнения команд без подтверждения укажите флаг force :

Откат миграций (Rolling Back Migrations)

Команда migrate:reset отменит все миграции:

Откат/запуск миграции одной командой (Rollback / Migrate In Single Command)

Написание миграций (Writing Migrations)

Создание таблиц (Creating Tables)

Для определения столбцов таблицы вы можете использовать любые методы конструктора схем column methods.

Проверка существования таблицы/столбца (Checking For Table / Column Existence)

Проверить существует ли таблица или колонка в таблице можно методами hasTable и hasColumn :

Подключение и Движок Хранилища (Connection & Storage Engine)

Если требуется использовать подключение, отличное от дефолтного, используйте метод connection :

Для установки движка таблицы, задайте свойство engine :

Переименование/удаление таблиц (Renaming / Dropping Tables)

Создание столбцов (Creating Columns)

Доступные типы столбцов (Available Column Types)

Перечень доступных типов в классе конструкторе схемы:

Модификация столбцов (Column Modifiers)

В дополнение к типам, перечисленным выше, доступны модификаторы столбцов, которые можно использовать при добавлении столбца. Добавим столбцу возможность принимать значения NULL:

Ниже приведен список доступных модификаторов. Список не включает индексные модификаторы index modifiers:

МодификаторОписание
->first()Place the column «first» in the table (MySQL Only)
->after(‘column’)Place the column «after» another column (MySQL Only)
->nullable()Allow NULL values to be inserted into the column
->default($value)Specify a «default» value for the column
->unsigned()Set integer columns to UNSIGNED

Изменение столбцов (Modifying Columns)

Необходимые условия (Prerequisites)

Обновление атрибутов столбца (Updating Column Attributes)

Метод change меняет тип столбца либо атрибуты. Например, увеличим размер строкового столбца name с 25 до 50:

Добавить вставку значений NULL:

Примечание: Изменение столбцов с типом enum на текущий момент не поддерживается.

Переименование столбцов (Renaming Columns)

Примечание: Переименование столбцов типа enum на текущий момент не поддерживается.

Удаление столбцов (Dropping Columns)

Удаление нескольких столбцов:

Примечание: Удаление/изменение нескольких столбцов внутри одной миграции для СУБД SQLite не поддерживается.

Создание индексов (Creating Indexes)

Создание индекса для существующего столбца:

Индекс на основе нескольких столбцов:

Laravel автоматически генерирует имя индекса, но можно указать его самому во втором параметре метода:

Доступные типа индексов (Available Index Types)

КомандаОписание
$table->primary(‘id’);Add a primary key.
$table->primary([‘first’, ‘last’]);Add composite keys.
$table->unique(’email’);Add a unique index.
$table->unique(‘state’, ‘my_index_name’);Add a custom index name.
$table->index(‘state’);Add a basic index.

Удаление индексов (Dropping Indexes)

Для удаление индекса нужно указать имя индекса. По умолчанию, Laravel создает имя для индекса, соединяя имя таблицы, имя столбца и тип индекса. Несколько примеров:

КомандаОписание
$table->dropPrimary(‘users_id_primary’);Удалить primary key из таблицы «users».
$table->dropUnique(‘users_email_unique’);Удалить уникальный индекс из таблицы «users».
$table->dropIndex(‘geo_state_index’);Удалить обычный индекс из таблицы «geo».

Если методу для удаления передать массив столбцов для удаления индекса, то имя индекса будет сформировано автоматически:

Ограничения внешнего ключа (Foreign Key Constraints)

Задать желаемое действие для свойств «on delete» и «on update» внешнего ключа:

При создании имени внешнего ключа используется то же соглашение о присвоении имен, что и для индексов. Laravel будет создавать имя на основе имени таблицы, столбца и суффикса «_foreign». Удаление внешнего ключа:

Удаление при задании столбца в массиве, что формирует имя удаляемого ключа автоматически:

Источник

Вступление

Миграции подобны контролю версий вашей базы данных, что позволяет вашей команде легко изменять и совместно использовать схему базы данных приложения. Миграции обычно сочетаются с компоновщиком схем Laravel, чтобы легко создавать схему базы данных вашего приложения. Если вам когда-либо приходилось указывать товарищу по команде добавить вручную столбец в их схему локальной базы данных, вы столкнулись с проблемой, которую решает миграция базы данных.

Schema Фасад Laravel обеспечивает независимую от базы данных поддержку для создания и управления таблицами во всех поддерживаемых системах баз данных Laravel.

Генерация миграций

Чтобы создать миграцию, используйте команду Artisan : make:migration

Новая миграция будет размещена в вашем каталоге. Каждое имя файла миграции содержит метку времени, которая позволяет Laravel определять порядок миграций. database/migrations

Структура миграции

Запуск Миграции

Чтобы выполнить все ваши выдающиеся миграции, выполните команду migrate Artisan:

Принуждение к миграции в производство

Откат миграции

Чтобы откатить последнюю операцию миграции, вы можете использовать rollback команду. Эта команда откатывает последний «пакет» миграций, который может включать несколько файлов миграции:

Вы можете откатить ограниченное количество миграций, предоставив step опцию rollback команде. Например, следующая команда откатит последние пять миграций:

Команда откатит все миграции вашего приложения: migrate:reset

Откат и миграция в одной команде

Команда откатит все ваши миграции и затем выполнит команду. Эта команда эффективно воссоздает всю вашу базу данных: migrate:refresh migrate

Вы можете откатить и перенастроить ограниченное количество миграций, указав step опцию для refresh команды. Например, следующая команда выполнит откат и перенастроит последние пять миграций:

Бросить все столы и мигрировать

Команда удалит все таблицы из базы данных и затем выполнит команду: migrate:fresh migrate

Таблицы

Создание таблиц

При создании таблицы вы можете использовать любой из методов столбца компоновщика схемы для определения столбцов таблицы.

Проверка наличия таблицы / столбца

Соединение с базой данных и параметры таблицы

Если вы хотите выполнить операцию схемы с подключением к базе данных, которое не является подключением по умолчанию, используйте connection метод:

Вы можете использовать следующие команды в построителе схемы для определения параметров таблицы:

командаОписание
$table->engine = ‘InnoDB’;Укажите механизм хранения таблиц (MySQL).
$table->charset = ‘utf8’;Укажите набор символов по умолчанию для таблицы (MySQL).
$table->collation = ‘utf8_unicode_ci’;Укажите параметры сортировки по умолчанию для таблицы (MySQL).
$table->temporary();Создайте временную таблицу (кроме SQL Server).

Переименование / удаление таблиц

Чтобы переименовать существующую таблицу базы данных, используйте rename метод:

Чтобы удалить существующую таблицу, вы можете использовать методы drop или dropIfExists :

Переименование таблиц с помощью внешних ключей

Перед переименованием таблицы вы должны убедиться, что любые ограничения внешнего ключа в таблице имеют явное имя в ваших файлах миграции, а не позволять Laravel назначать имя на основе соглашения. В противном случае имя ограничения внешнего ключа будет ссылаться на старое имя таблицы.

Колонны

Создание столбцов

table Метод на Schema фасаде может быть использован для обновления существующих таблиц. Как и create метод, table метод принимает два аргумента: имя таблицы и объект, Closure который получает Blueprint экземпляр, который можно использовать для добавления столбцов в таблицу:

Доступные типы столбцов

Компоновщик схемы содержит различные типы столбцов, которые вы можете указать при построении таблиц:

командаОписание
$table->bigIncrements(‘id’);Автоинкрементный эквивалентный столбец UNSIGNED BIGINT (первичный ключ).
$table->bigInteger(‘votes’);BIGINT эквивалентный столбец.
$table->binary(‘data’);BLOB эквивалентный столбец.
$table->boolean(‘confirmed’);BOOLEAN эквивалентный столбец.
$table->char(‘name’, 100);CHAR эквивалентный столбец с необязательной длиной.
$table->date(‘created_at’);ДАТА эквивалентный столбец.
$table->dateTime(‘created_at’);DATETIME эквивалентный столбец.
$table->dateTimeTz(‘created_at’);DATETIME (с часовым поясом) эквивалентный столбец.
$table->decimal(‘amount’, 8, 2);DECIMAL эквивалентный столбец с точностью (общее количество цифр) и масштабом (десятичные цифры).
$table->double(‘amount’, 8, 2);Двойной эквивалентный столбец с точностью (общее количество цифр) и масштабом (десятичные цифры).
$table->enum(‘level’, [‘easy’, ‘hard’]);ENUM эквивалентный столбец.
$table->float(‘amount’, 8, 2);FLOAT эквивалентный столбец с точностью (общее количество цифр) и масштабом (десятичные цифры).
$table->geometry(‘positions’);ГЕОМЕТРИЯ эквивалентный столбец.
$table->geometryCollection(‘positions’);GEOMETRYCOLLECTION эквивалентный столбец.
$table->increments(‘id’);Автоинкрементный эквивалентный столбец UNSIGNED INTEGER (первичный ключ).
$table->integer(‘votes’);INTEGER эквивалентный столбец.
$table->ipAddress(‘visitor’);IP-адрес эквивалентного столбца.
$table->json(‘options’);JSON эквивалентный столбец.
$table->jsonb(‘options’);JSONB эквивалентный столбец.
$table->lineString(‘positions’);LINESTRING эквивалентный столбец.
$table->longText(‘description’);LONGTEXT эквивалентный столбец.
$table->macAddress(‘device’);Эквивалентный MAC-адрес столбец.
$table->mediumIncrements(‘id’);Автоинкрементный эквивалентный столбец UNSIGNED MEDIUMINT (первичный ключ).
$table->mediumInteger(‘votes’);MEDIUMINT эквивалентный столбец.
$table->mediumText(‘description’);MEDIUMTEXT эквивалентный столбец.
$table->morphs(‘taggable’);Добавляет taggable_id неподписанные столбцы BIGINT и taggable_type VARCHAR.
$table->multiLineString(‘positions’);MULTILINESTRING эквивалентный столбец.
$table->multiPoint(‘positions’);MULTIPOINT эквивалентный столбец.
$table->multiPolygon(‘positions’);МНОГОПОЛИГОННЫЙ эквивалентный столбец.
$table->nullableMorphs(‘taggable’);Добавляет обнуляемые версиистолбцов. morphs()
$table->nullableTimestamps();Псевдоним метода. timestamps()
$table->point(‘position’);ТОЧКА эквивалентного столбца.
$table->polygon(‘positions’);Полигон эквивалентный столбец.
$table->rememberToken();Добавляет обнуляемый remember_token эквивалентный столбец VARCHAR (100).
$table->set(‘flavors’, [‘strawberry’, ‘vanilla’]);Установить эквивалентный столбец.
$table->smallIncrements(‘id’);Автоинкрементный эквивалентный столбец UNSIGNED SMALLINT (первичный ключ).
$table->smallInteger(‘votes’);SMALLINT эквивалентный столбец.
$table->softDeletes();Добавляет обнуляемый deleted_at эквивалентный столбец TIMESTAMP для мягкого удаления.
$table->softDeletesTz();Добавляет обнуляемый deleted_at эквивалент столбца TIMESTAMP (с часовым поясом) для мягкого удаления.
$table->string(‘name’, 100);VARCHAR эквивалентный столбец с необязательной длиной.
$table->text(‘description’);ТЕКСТ эквивалентный столбец.
$table->time(‘sunrise’);ВРЕМЯ эквивалентный столбец.
$table->timeTz(‘sunrise’);ВРЕМЯ (с часовым поясом) эквивалентный столбец.
$table->timestamp(‘added_on’);TIMESTAMP эквивалентный столбец.
$table->timestampTz(‘added_on’);TIMESTAMP (с часовым поясом) эквивалентный столбец.
$table->timestamps();Добавляет пустые created_at и updated_at эквивалентные столбцы TIMESTAMP.
$table->timestampsTz();Добавляет обнуляемые created_at и updated_at TIMESTAMP (с часовым поясом) эквивалентные столбцы.
$table->tinyIncrements(‘id’);Автоинкрементный эквивалентный столбец UNSIGNED TINYINT (первичный ключ).
$table->tinyInteger(‘votes’);TINYINT эквивалентный столбец.
$table->unsignedBigInteger(‘votes’);НЕПодписанный эквивалентный столбец BIGINT.
$table->unsignedDecimal(‘amount’, 8, 2);UNSIGNED DECIMAL эквивалентный столбец с точностью (общее количество цифр) и масштабом (десятичные цифры).
$table->unsignedInteger(‘votes’);Беззнаковый целочисленный эквивалентный столбец.
$table->unsignedMediumInteger(‘votes’);UNSIGNED MEDIUMINT эквивалентный столбец.
$table->unsignedSmallInteger(‘votes’);НЕПИСАННЫЙ МАЛЕНЬКИЙ эквивалентный столбец.
$table->unsignedTinyInteger(‘votes’);UNSIGNED TINYINT эквивалентный столбец.
$table->uuid(‘id’);UUID эквивалентный столбец.
$table->year(‘birth_year’);ГОД эквивалентный столбец.

Модификаторы столбцов

В дополнение к перечисленным выше типам столбцов есть несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбца в таблицу базы данных. Например, чтобы сделать столбец «обнуляемым», вы можете использовать nullable метод:

Ниже приведен список всех доступных модификаторов столбцов. Этот список не включает модификаторы индекса :

МодификаторОписание
->after(‘column’)Поместите столбец «после» другого столбца (MySQL)
->autoIncrement()Установить столбцы INTEGER как автоинкремент (первичный ключ)
->charset(‘utf8’)Укажите набор символов для столбца (MySQL)
->collation(‘utf8_unicode_ci’)Укажите параметры сортировки для столбца (MySQL / SQL Server).
->comment(‘my comment’)Добавить комментарий к колонке (MySQL / PostgreSQL)
->default($value)Укажите значение по умолчанию для столбца
->first()Поместите столбец «первый» в таблице (MySQL)
->nullable($value = true)Позволяет (по умолчанию) значения NULL вставлять в столбец
->storedAs($expression)Создать сохраненный сгенерированный столбец (MySQL)
->unsigned()Установить для столбцов INTEGER значение UNSIGNED (MySQL)
->useCurrent()Установите столбцы TIMESTAMP для использования CURRENT_TIMESTAMP в качестве значения по умолчанию
->virtualAs($expression)Создать виртуальный сгенерированный столбец (MySQL)
->generatedAs($expression)Создать столбец идентификаторов с указанными параметрами последовательности (PostgreSQL)
->always()Определяет приоритет значений последовательности над вводом для столбца идентификаторов (PostgreSQL)

Изменение столбцов

Предпосылки

Перед изменением столбца обязательно добавьте зависимость в свой файл. Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания запросов SQL, необходимых для внесения указанных изменений в столбец: doctrine/dbal composer.json

Обновление атрибутов столбца

Мы также можем изменить столбец так, чтобы он мог обнуляться:

Только следующие типы столбцов могут быть изменены: bigInteger, двоичный, логический, дата, dateTime, dateTimeTz, десятичный, целочисленный, json, longText, mediumText, smallInteger, строка, текст, время, unsignedBigInteger, unsignedInteger и unsignedSmallInteger.

Переименование столбцов

Чтобы переименовать столбец, вы можете использовать renameColumn метод в построителе схемы. Перед переименованием столбца обязательно добавьте зависимость в ваш файл: doctrine/dbal composer.json

Переименование любого столбца в таблице, которая также имеет столбец типа, enum в настоящее время не поддерживается.

Отбрасывание столбцов

Чтобы удалить столбец, используйте dropColumn метод в построителе схемы. Прежде чем удалять столбцы из базы данных SQLite, вам нужно добавить зависимость в ваш файл и запустить команду в своем терминале для установки библиотеки: doctrine/dbal composer.json composer update

Вы можете удалить несколько столбцов из таблицы, передав в dropColumn метод массив имен столбцов :

Удаление или изменение нескольких столбцов в рамках одной миграции при использовании базы данных SQLite не поддерживается.

Доступные псевдонимы команд

командаОписание
$table->dropMorphs(‘morphable’);Оставьте morphable_id и morphable_type столбцы.
$table->dropRememberToken();Оставьте remember_token колонку.
$table->dropSoftDeletes();Оставьте deleted_at колонку.
$table->dropSoftDeletesTz();Псевдоним метода. dropSoftDeletes()
$table->dropTimestamps();Оставьте created_at и updated_at столбцы.
$table->dropTimestampsTz();Псевдоним метода. dropTimestamps()

Индексы

Создание индексов

Построитель схем поддерживает несколько типов индексов. Сначала давайте рассмотрим пример, в котором значения столбца должны быть уникальными. Чтобы создать индекс, мы можем связать unique метод с определением столбца:

Кроме того, вы можете создать индекс после определения столбца. Например:

Вы можете даже передать массив столбцов в метод индекса, чтобы создать составной (или составной) индекс:

Laravel автоматически сгенерирует разумное имя индекса, но вы можете передать в метод второй аргумент, чтобы указать имя самостоятельно:

Доступные типы индексов

Каждый метод индекса принимает необязательный второй аргумент для указания имени индекса. Если опущено, имя будет получено из имен таблицы и столбцов.

командаОписание
$table->primary(‘id’);Добавляет первичный ключ.
$table->primary([‘id’, ‘parent_id’]);Добавляет составные ключи.
$table->unique(’email’);Добавляет уникальный индекс.
$table->index(‘state’);Добавляет простой индекс.
$table->spatialIndex(‘location’);Добавляет пространственный индекс. (кроме SQLite)

Длина индекса и MySQL / MariaDB

Laravel использует utf8mb4 набор символов по умолчанию, который включает в себя поддержку хранения «emojis» в базе данных. Если вы используете версию MySQL, более раннюю, чем версия 5.7.7, или MariaDB, более раннюю, чем версия 10.2.2, вам может потребоваться вручную настроить длину строки по умолчанию, создаваемую миграциями, чтобы MySQL создавал для них индексы. Вы можете настроить это, вызвав метод в вашем : Schema::defaultStringLength AppServiceProvider

Кроме того, вы можете включить innodb_large_prefix опцию для вашей базы данных. Обратитесь к документации вашей базы данных для получения инструкций о том, как правильно включить эту опцию.

Переименование индексов

Чтобы переименовать индекс, вы можете использовать renameIndex метод. Этот метод принимает текущее имя индекса в качестве первого аргумента и желаемое имя в качестве второго аргумента:

Удаление индексов

Чтобы удалить индекс, вы должны указать имя индекса. По умолчанию Laravel автоматически присваивает индексам разумное имя. Объедините имя таблицы, имя индексированного столбца и тип индекса. Вот некоторые примеры:

командаОписание
$table->dropPrimary(‘users_id_primary’);Удалите первичный ключ из таблицы «пользователи».
$table->dropUnique(‘users_email_unique’);Удалить уникальный индекс из таблицы «пользователи».
$table->dropIndex(‘geo_state_index’);Удалите базовый индекс из таблицы «гео».
$table->dropSpatialIndex(‘geo_location_spatialindex’);Удалите пространственный индекс из таблицы «geo» (кроме SQLite).

Если вы передадите массив столбцов в метод, который удаляет индексы, обычное имя индекса будет сгенерировано на основе имени таблицы, столбцов и типа ключа:

Ограничения внешнего ключа

Laravel также предоставляет поддержку для создания ограничений внешнего ключа, которые используются для обеспечения ссылочной целостности на уровне базы данных. Например, давайте определим user_id столбец в posts таблице, который ссылается на id столбец в users таблице:

Вы также можете указать желаемое действие для свойств «при удалении» и «при обновлении» ограничения:

Чтобы удалить внешний ключ, вы можете использовать dropForeign метод. Ограничения внешнего ключа используют то же соглашение об именах, что и индексы. Итак, мы объединим имя таблицы и столбцы в ограничении, а затем добавим суффикс имени к _foreign:

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

Вы можете включить или отключить ограничения внешнего ключа в своих миграциях, используя следующие методы:

SQLite по умолчанию отключает ограничения внешнего ключа. При использовании SQLite обязательно включите поддержку внешних ключей в конфигурации базы данных, прежде чем пытаться создать их в своих миграциях.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *