Laravel удалить файл миграции
Русское сообщество разработки на PHP-фреймворке Laravel.
Как почистить миграции
За время разработки куча миграций скапливается. Где то столбец добавили, другой убрали, потом переименовали итд. Понятно что цепь миграций приводит к нужному результату.. Но можно ли их то почистить и заменить несколькими, а то и одной актуальными?
Не в сети 10.03.2016
Можно. В 5.5 есть команда php artisan migrate:fresh, в предыдущих версиях пересоздай БД вручную и запусти обновленные миграции.
Но вообще, лучше во время разработки не плодить лишние миграции. Используй одну миграцию на таблицу, особенно если работаешь один.
Не в сети 03.03.2016
>Используй одну миграцию на таблицу, особенно если работаешь один.
Так приходит идеи, что то одно нужно в таблицу добавить то другое.
www-data@nf-web2:/www/nofiles55$ php artisan migrate:fresh
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrating: 2017_08_30_122207_create_activations_table
Migrated: 2017_08_30_122207_create_activations_table
Migrating: 2017_08_30_131621_create_mediable_tables
Migrated: 2017_08_30_131621_create_mediable_tables
Migrating: 2017_08_30_173136_add_verified_col
Migrated: 2017_08_30_173136_add_verified_col
Migrating: 2017_08_31_090113_create_email_change
Migrated: 2017_08_31_090113_create_email_change
Migrating: 2017_08_31_092703_create_pass_change
Migrated: 2017_08_31_092703_create_pass_change
Migrating: 2017_09_08_083411_cashier_prepare
Migrated: 2017_09_08_083411_cashier_prepare
Migrating: 2017_10_02_203042_AddCurrentPeriodEndColumn
Migrated: 2017_10_02_203042_AddCurrentPeriodEndColumn
Migrating: 2017_10_07_121655_ChangeToBrainTree
Migrated: 2017_10_07_121655_ChangeToBrainTree
Migrating: 2017_10_09_102226_create_plans_table
Migrated: 2017_10_09_102226_create_plans_table
Migrating: 2017_11_02_210724_payments_table
Migrated: 2017_11_02_210724_payments_table
Migrating: 2017_11_08_153942_subscription_start_date
Migrated: 2017_11_08_153942_subscription_start_date
Migrating: 2017_11_10_113155_payment_braintree_id
Migrated: 2017_11_10_113155_payment_braintree_id
Я не хочу запускать все выдающиеся миграции на laravel 4. У меня 5 миграций. Теперь я просто хочу запустить одну миграцию. вместо этого: php artisan migrate Я хотел бы запустить одну конкретную миграцию: php artisan migrate MY_MIGRATION_TO_RUN
Похоже, вы делаете это неправильно.
миграции были сделаны для выполнения Laravel один за другим, в точном порядке они были созданы, поэтому он может отслеживать исполнение и порядок исполнения. Таким образом, Laravel сможет безопасно откатить пакет миграций, не рискуя нарушить вашу базу данных.
давая пользователю возможность выполнять их вручную, сделайте невозможным знать (наверняка), как откатить изменения в вашем база данных.
Если вам действительно нужно выполнить что-то в вашей базе данных, вам лучше создать сценарий DDL и вручную выполнить его на своем веб-сервере.
или просто создайте новую миграцию и выполните ее с помощью artisan.
EDIT:
Если вам нужно сначала запустить его, вам нужно сначала создать его.
Если вам просто нужно изменить их порядок, переименуйте файл в первый. Миграции создаются с timestemp:
чтобы создать новую миграцию перед этой, вы можете назвать ее
просто переместите уже выполненные миграции из папки app/config/database/migrations/. Затем выполните команду php artisan migrate . Сработало как по волшебству .
хороший маленький фрагмент, чтобы облегчить любые страхи при запуске Laravel 4 миграции php artisan migrate --pretend . Это выведет только SQL, который был бы запущен, если вы выполнили фактическую миграцию.
похоже, что ваши начальные 4 миграции уже запущены. Я бы догадался, что когда вы php artisan migrate он будет запускать только новую, недавнюю миграцию.
совет: убедитесь, что все ваши up() и down() работают так, как вы ожидаете. Мне нравится бегать вверх(), вниз (), вверх (), когда я бегу . миграции, просто чтобы проверить их. было бы ужасно для вас получить 5-6 миграций и понять, что вы не можете откатить их без проблем, потому что вы не соответствовали down() с up() 100% процентов.
просто мои два цента! Надеюсь --pretend помогает.
вы можете поместить миграции в другие папки и запустить что-то вроде:
единственный способ вновь запустить migrattion является грязной. Необходимо открыть базу данных и удалить строку в таблице миграции, которая представляет миграцию.
затем снова запустите php artisan migrate.
вы можете создать отдельный каталог для миграции с вашего терминала следующим образом:
а затем переместите конкретную миграцию, которую вы хотите запустить в этот каталог, и выполните следующую команду:
надеюсь, что это помогает!
Я дал ответ на другой пост, но вы можете сделать это: запустить artisan migrate чтобы запустить все миграции, затем следующие команды SQL для обновления таблицы миграций, что делает его похожим на миграции были запущены по одному:
это изменит столбец пакета на 1, 2, 3, 4 .. так далее. Добавить WHERE batch>=. условие там (и обновите начальное значение @a ) Если вы хотите повлиять на определенные миграции.
после этого, вы можете artisan migrate:rollback насколько требуется, и он будет проходить через миграции по одному за раз.
есть один простой способ, который я знаю, чтобы сделать это может быть доступен только для вас на просто локальный хост
- изменить ваш файл миграции по мере необходимости
- откройте phpMyAdmin или все, что вы используете, чтобы увидеть таблицу базы данных
- найдите нужную таблицу и бросьте ее
- найдите таблицу миграций и откройте ее
- в этой таблице в поле миграция найдите нужное имя таблицы и удалите его row
- наконец, выполните команду php artisan migrate из командной строки или терминала. это приведет только к миграции тех таблиц, которые не существуют в таблице миграции в базе данных.
этот путь совершенно безопасен и не сделает никакие ошибки или проблемы пока он смотрит как непрофессиональный путь но он все еще работает совершенно.
Если это только для целей тестирования, вот как я это делаю:
для моего случая у меня есть несколько миграций, одна из которых содержит настройки приложения.
пока я тестирую приложение, и не все миграции уже настроены, я просто перемещаю их в новую папку "будущее". Этот фолд не будет затронут ремесленником, и он будет выполнять только миграцию, которую вы хотите.
грязный обходной путь, но он работает.
Если вы хотите запустить свой последний файл миграции, вы должны сделать следующее:
вы также можете вернуться назад, прежде чем добавлять миграцию с помощью:
у меня такая же проблема. Скопируйте коды создания таблицы в первый файл миграции, как показано ниже:
также вы можете изменить (уменьшить) batch количество столбцов в migrations таблица ;)
и затем запустить php artisan migrate .
бросьте исключение в миграции, если вы не хотите его применять, и это остановит весь процесс миграции.
используя этот подход, вы можете разделить свою кучу миграции на шаги.
Так Просто. просто перейдите в папку миграции. переместить все файлы миграции в другую папку. затем верните все миграции один за другим в папку миграции и запустите миграцию для одного из них(php artisan). когда вы вставляете плохой файл миграции в главную папку миграции и запускаете php artisan migrate в командной строке, будет ошибка.
Миграции — что-то вроде системы контроля версий для вашей базы данных. Они позволяют вашей команде изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с построителем структур для более простого обращения с архитектурой вашей базы данных. Если вы когда-нибудь просили коллегу вручную добавить столбец в его локальную БД, значит вы сталкивались с проблемой, которую решают миграции БД.
Фасад Laravel Schema обеспечивает поддержку создания и изменения таблиц в независимости от используемой СУБД из числа тех, что поддерживаются в Laravel.
Создание миграций
Для создания новой миграции используйте Artisan-команду make:migration :
Миграция будет помещена в директорию database/migrations . Название файла каждой миграции будет содержать метку времени, которая позволяет фреймворку определять порядок применения миграций.
Можно также использовать параметры --table и --create для указания имени таблицы и того факта, что миграция будет создавать новую таблицу. Эти параметры просто заранее создают указанную таблицу в создаваемом файле-заглушке миграции:
Если вы хотите указать свой путь для сохранения создаваемых миграций, используйте параметр --path при запуске команды make:migration . Этот путь должен быть указан относительно базового пути вашего приложения.
Структура миграций
Класс миграций содержит два метода: up и down . Метод up используется для добавления новых таблиц, столбцов или индексов в вашу БД, а метод down просто отменяет операции, выполненные методом up .
В обоих методах вы можете использовать построитель структур Laravel для удобного создания и изменения таблиц. О всех доступных методах построителя структур Schema читайте в его доументации. Например, эта миграция создаёт таблицу flights :
Выполнение миграций
Для запуска всех необходимых вам миграций используйте Artisan-команду migrate :
Если вы используете виртуальную машину Homestead, вам надо выполнить эту команду на своей ВМ.
Принудительные миграции в продакшне
Некоторые операции миграций разрушительны, значит они могут привести к потере ваших данных. Для предотвращения случайного запуска этих команд на вашей боевой БД перед их выполнением запрашивается подтверждение. Для принудительного запуска команд без подтверждения используйте ключ --force :
Откат миграций
Для отмены изменений, сделанных последней миграцией, используйте команду rollback . Эта команда отменит результат последней "партии" миграций, которая может включать несколько файлов миграций:
Вы можете сделать откат определённого числа миграций, указав параметр step для команды rollback . Например, эта команда откатит последние пять миграций:
Команда migrate:reset откатит изменения всех миграций вашего приложения:
Откат всех миграций и их повторное применение одной командой
Команда migrate:refresh отменит изменения всех ваших миграций, а затем выполнит команду migrate . Эта команда эффективно создаёт заново всю вашу БД:
Вы можете откатить и повторно применить определённое число миграций, указав параметр step для команды refresh . Например, эта команда откатит и повторно применит последние пять миграций:
Таблицы
Создание таблиц
Для создания новой таблицы БД используйте метод create фасада Schema . Метод create принимает два аргумента. Первый — имя таблицы, второй — функция Closure , которую получает объект Blueprint , который можно использовать для определения новой таблицы:
Само собой, при создании таблицы вы можете использовать любые методы для работы со столбцами построителя структур.
Проверка существования таблицы / столбца
Вы можете легко проверить существование таблицы или столбца при помощи методов hasTable и hasColumn :
Подключение и подсистема хранения данных
Если вы хотите выполнить операции над структурой через подключение к БД, которое не является вашим основным подключением, используйте метод connection :
Используйте свойство engine построителя структур, чтобы задать подсистему хранения данных для таблицы:
Переименование / удаление таблиц
Для переименования существующей таблицы используйте метод rename :
Для удаления существующей таблицы используйте методы drop или dropIfExists :
Переименование таблиц с внешними ключами
Перед переименованием таблицы вы должны проверить, что для всех ограничений внешних ключей таблицы есть явные имена в файлах вашей миграции, чтобы избежать автоматического назначения имён на основе принятого соглашения. Иначе имя ограничения внешнего ключа будет ссылаться на имя старой таблицы.
Столбцы
Создание столбцов
Для изменения существующей таблицы мы будем использовать метод table фасада Schema . Как и метод create , метод table принимает два аргумента: имя таблицы и замыкание, которое получает экземпляр Blueprint , который можно использовать для добавления столбцов в таблицу:
Доступные типы столбцов
Разумеется, построитель структур содержит различные типы столбцов, которые вы можете указывать при построении ваших таблиц:
Команда | Описание |
---|---|
$table->bigIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED BIG INTEGER". |
$table->bigInteger('votes'); | Эквивалент BIGINT для базы данных. |
$table->binary('data'); | Эквивалент BLOB для базы данных. |
$table->boolean('confirmed'); | Эквивалент BOOLEAN для базы данных. |
$table->char('name', 4); | Эквивалент CHAR для базы данных. |
$table->date('created_at'); | Эквивалент DATE для базы данных. |
$table->dateTime('created_at'); | Эквивалент DATETIME для базы данных. |
$table->dateTimeTz('created_at'); | Эквивалент DATETIME (с часовым поясом) для базы данных. |
$table->decimal('amount', 5, 2); | Эквивалент DECIMAL с точностью и масштабом. |
$table->double('column', 15, 8); | Эквивалент DOUBLE с точностью, всего 15 цифр, после запятой 8 цифр. |
$table->enum('choices', ['foo', 'bar']); | Эквивалент ENUM для базы данных. |
$table->float('amount', 8, 2); | Эквивалент FLOAT для базы данных, всего 8 знаков, из них 2 после запятой. |
$table->increments('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED INTEGER". |
$table->integer('votes'); | Эквивалент INTEGER для базы данных. |
$table->ipAddress('visitor'); | Эквивалент IP-адреса для базы данных. |
$table->json('options'); | Эквивалент JSON для базы данных. |
$table->jsonb('options'); | Эквивалент JSONB для базы данных. |
$table->longText('description'); | Эквивалент LONGTEXT для базы данных. |
$table->macAddress('device'); | Эквивалент MAC-адреса для базы данных. |
$table->mediumIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED MEDIUM INTEGER". |
$table->mediumInteger('numbers'); | Эквивалент MEDIUMINT для базы данных. |
$table->mediumText('description'); | Эквивалент MEDIUMTEXT для базы данных. |
$table->morphs('taggable'); | Добавление столбца taggable_id INTEGER и taggable_type STRING. |
$table->nullableMorphs('taggable'); | Аналогично morphs() , но разрешено значение NULL. |
$table->nullableTimestamps(); | Аналогично timestamps() , но разрешено значение NULL. |
$table->rememberToken(); | Добавление столбца remember_token как VARCHAR(100) NULL. |
$table->smallIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED SMALL INTEGER". |
$table->smallInteger('votes'); | Эквивалент SMALLINT для базы данных. |
$table->softDeletes(); | Добавление столбца deleted_at для мягкого удаления с разрешенным значением NULL. |
$table->string('email'); | Эквивалент VARCHAR. |
$table->string('name', 100); | Эквивалент VARCHAR с длиной. |
$table->text('description'); | Эквивалент TEXT для базы данных. |
$table->time('sunrise'); | Эквивалент TIME для базы данных. |
$table->timeTz('sunrise'); | Эквивалент TIME (с часовым поясом) для базы данных. |
$table->tinyInteger('numbers'); | Эквивалент TINYINT для базы данных. |
$table->timestamp('added_on'); | Эквивалент TIMESTAMP для базы данных. |
$table->timestampTz('added_on'); | Эквивалент TIMESTAMP (с часовым поясом) для базы данных. |
$table->timestamps(); | Добавление столбцов created_at и updated_at с разрешенным значением NULL. |
$table->timestampsTz(); | Добавление столбцов created_at и updated_at (с часовым поясом), для которых разрешено значение NULL. |
$table->unsignedBigInteger('votes'); | Эквивалент Unsigned BIGINT для базы данных. |
$table->unsignedInteger('votes'); | Эквивалент Unsigned INT для базы данных. |
$table->unsignedMediumInteger('votes'); | Эквивалент Unsigned MEDIUMINT для базы данных. |
$table->unsignedSmallInteger('votes'); | Эквивалент Unsigned SMALLINT для базы данных. |
$table->unsignedTinyInteger('votes'); | Эквивалент Unsigned TINYINT для базы данных. |
$table->uuid('id'); | Эквивалент UUID для базы данных. |
Модификаторы столбцов
Вдобавок к перечисленным типам столбцов существует несколько "модификаторов" столбцов, которые вы можете использовать при добавлении столбцов в таблицу. Например, чтобы сделать столбец "обнуляемым", используйте метод nullable :
Ниже перечислены все доступные модификаторы столбцов. В этом списке отсутствуют модицикаторы индексов:
Модификатор | Описание |
---|---|
->after('column') | Помещает столбец "после" указанного столбца (только MySQL) |
->comment('my comment') | Добавляет комментарий в столбец |
->default($value) | Указывает значение "по умолчанию" для столбца |
->first() | Помещает столбец "первым" в таблице (только MySQL) |
->nullable() | Разрешает вставлять значения NULL в столбец |
->storedAs($expression) | Создать генерируемый столбец типа stored (только MySQL) |
->unsigned() | Делает столбцы integer беззнаковыми UNSIGNED |
->virtualAs($expression) | Создать генерируемый столбец типа virtual (только MySQL) |
Изменение столбцов
Требования
Перед изменением столбцов добавьте зависимость doctrine/dbal в свой файл composer.json . Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания SQL-запросов, необходимых для выполнения указанных преобразований столбца:
Изменение атрибутов столбца
Метод 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 :
Пока не поддерживается переименование любых столбцов в таблице, содержащей столбцы типов enum .
Удаление столбцов
Для удаления столбца используйте метод 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
По умолчанию Laravel использует набор символов utf8mb4 , который включает поддаржку хранения "эмоджи" в базе данных. Если вы работаете на версии MySQL старее, чем релиз 5.7.7 или версии MariaDB старее, чем релиз 10.2.2, вам может потребоваться вручную настроить длину строки по умолчанию, которая генерируется миграциями. Таким образом, MySQL сможет генерировать для них индексы. Это можно настроить вызвав метод Schema::defaultStringLength в вашем AppServiceProvider :
Или же, вы можете включить опцию innodb_large_prefix для своей базы данных. См. документацию своей базы данных для получения инструкций о том, как правильно включить данную опцию.
Удаление индексов
Для удаления индекса необходимо указать его имя. По умолчанию Laravel автоматически назначает имена индексам. Просто соедините имя таблицы, имя столбца-индекса и тип индекса. Ниже приведено несколько примеров:
Команда | Описание |
---|---|
$table->dropPrimary('users_id_primary'); | Удаление первичного ключа из таблицы "users". |
$table->dropUnique('users_email_unique'); | Удаление уникального индекса из таблицы "users". |
$table->dropIndex('geo_state_index'); | Удаление базового индекса из таблицы "geo". |
Если вы передадите массив столбцов в метод для удаления индексов, будет сгенерировано стандартное имя индекса на основе имени таблицы, столбца и типа ключа:
Ограничения внешнего ключа
Laravel также поддерживает создание ограничений для внешнего ключа, которые используются для обеспечения ссылочной целостности на уровне базы данных. Например, давайте определим столбец user_id в таблице posts , который ссылается на столбец id в таблице users :
Вы также можете указать требуемое действие для свойств ограничений "on delete" и "on update":
Для удаления внешнего ключа используйте метод dropForeign . Ограничения внешнего ключа используют те же принципы именования, что и индексы. Итак, мы соединим имя таблицы и столбцов из ограничения, а затем добавим суффикс "_foreign":
Либо вы можете передать значение массива, при этом для удаления будет автоматически использовано стандартное имя ограничения:
Вы можете включить или выключить ограничения внешнего ключа в своих миграциях с помощью следующих методов:
Миграции — что-то вроде системы контроля версий для вашей базы данных. Они позволяют вашей команде изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с построителем структур для более простого обращения с архитектурой вашей базы данных. Если вы когда-нибудь просили коллегу вручную добавить столбец в его локальную БД, значит вы сталкивались с проблемой, которую решают миграции БД.
Фасад Laravel Schema обеспечивает поддержку создания и изменения таблиц в независимости от используемой СУБД из числа тех, что поддерживаются в Laravel.
Создание миграций
Для создания новой миграции используйте Artisan-команду make:migration :
Миграция будет помещена в директорию database/migrations . Название файла каждой миграции будет содержать метку времени, которая позволяет фреймворку определять порядок применения миграций.
Можно также использовать параметры --table и --create для указания имени таблицы и того факта, что миграция будет создавать новую таблицу. Эти параметры просто заранее создают указанную таблицу в создаваемом файле-заглушке миграции:
Если вы хотите указать свой путь для сохранения создаваемых миграций, используйте параметр --path при запуске команды make:migration . Этот путь должен быть указан относительно базового пути вашего приложения.
Структура миграций
Класс миграций содержит два метода: up и down . Метод up используется для добавления новых таблиц, столбцов или индексов в вашу БД, а метод down просто отменяет операции, выполненные методом up .
В обоих методах вы можете использовать построитель структур Laravel для удобного создания и изменения таблиц. О всех доступных методах построителя структур Schema читайте в его доументации. Например, эта миграция создаёт таблицу flights :
Выполнение миграций
Для запуска всех необходимых вам миграций используйте Artisan-команду migrate :
Если вы используете виртуальную машину Homestead, вам надо выполнить эту команду на своей ВМ.
Принудительные миграции в продакшне
Некоторые операции миграций разрушительны, значит они могут привести к потере ваших данных. Для предотвращения случайного запуска этих команд на вашей боевой БД перед их выполнением запрашивается подтверждение. Для принудительного запуска команд без подтверждения используйте ключ --force :
Откат миграций
Для отмены изменений, сделанных последней миграцией, используйте команду rollback . Эта команда отменит результат последней "партии" миграций, которая может включать несколько файлов миграций:
Вы можете сделать откат определённого числа миграций, указав параметр step для команды rollback . Например, эта команда откатит последние пять миграций:
Команда migrate:reset откатит изменения всех миграций вашего приложения:
Откат всех миграций и их повторное применение одной командой
Команда migrate:refresh отменит изменения всех ваших миграций, а затем выполнит команду migrate . Эта команда эффективно создаёт заново всю вашу БД:
Вы можете откатить и повторно применить определённое число миграций, указав параметр step для команды refresh . Например, эта команда откатит и повторно применит последние пять миграций:
Таблицы
Создание таблиц
Для создания новой таблицы БД используйте метод create фасада Schema . Метод create принимает два аргумента. Первый — имя таблицы, второй — функция Closure , которую получает объект Blueprint , который можно использовать для определения новой таблицы:
Само собой, при создании таблицы вы можете использовать любые методы для работы со столбцами построителя структур.
Проверка существования таблицы / столбца
Вы можете легко проверить существование таблицы или столбца при помощи методов hasTable и hasColumn :
Подключение и подсистема хранения данных
Если вы хотите выполнить операции над структурой через подключение к БД, которое не является вашим основным подключением, используйте метод connection :
Используйте свойство engine построителя структур, чтобы задать подсистему хранения данных для таблицы:
Переименование / удаление таблиц
Для переименования существующей таблицы используйте метод rename :
Для удаления существующей таблицы используйте методы drop или dropIfExists :
Переименование таблиц с внешними ключами
Перед переименованием таблицы вы должны проверить, что для всех ограничений внешних ключей таблицы есть явные имена в файлах вашей миграции, чтобы избежать автоматического назначения имён на основе принятого соглашения. Иначе имя ограничения внешнего ключа будет ссылаться на имя старой таблицы.
Столбцы
Создание столбцов
Для изменения существующей таблицы мы будем использовать метод table фасада Schema . Как и метод create , метод table принимает два аргумента: имя таблицы и замыкание, которое получает экземпляр Blueprint , который можно использовать для добавления столбцов в таблицу:
Доступные типы столбцов
Разумеется, построитель структур содержит различные типы столбцов, которые вы можете указывать при построении ваших таблиц:
Команда | Описание |
---|---|
$table->bigIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED BIG INTEGER". |
$table->bigInteger('votes'); | Эквивалент BIGINT для базы данных. |
$table->binary('data'); | Эквивалент BLOB для базы данных. |
$table->boolean('confirmed'); | Эквивалент BOOLEAN для базы данных. |
$table->char('name', 4); | Эквивалент CHAR для базы данных. |
$table->date('created_at'); | Эквивалент DATE для базы данных. |
$table->dateTime('created_at'); | Эквивалент DATETIME для базы данных. |
$table->dateTimeTz('created_at'); | Эквивалент DATETIME (с часовым поясом) для базы данных. |
$table->decimal('amount', 5, 2); | Эквивалент DECIMAL с точностью и масштабом. |
$table->double('column', 15, 8); | Эквивалент DOUBLE с точностью, всего 15 цифр, после запятой 8 цифр. |
$table->enum('choices', ['foo', 'bar']); | Эквивалент ENUM для базы данных. |
$table->float('amount', 8, 2); | Эквивалент FLOAT для базы данных, всего 8 знаков, из них 2 после запятой. |
$table->increments('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED INTEGER". |
$table->integer('votes'); | Эквивалент INTEGER для базы данных. |
$table->ipAddress('visitor'); | Эквивалент IP-адреса для базы данных. |
$table->json('options'); | Эквивалент JSON для базы данных. |
$table->jsonb('options'); | Эквивалент JSONB для базы данных. |
$table->longText('description'); | Эквивалент LONGTEXT для базы данных. |
$table->macAddress('device'); | Эквивалент MAC-адреса для базы данных. |
$table->mediumIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED MEDIUM INTEGER". |
$table->mediumInteger('numbers'); | Эквивалент MEDIUMINT для базы данных. |
$table->mediumText('description'); | Эквивалент MEDIUMTEXT для базы данных. |
$table->morphs('taggable'); | Добавление столбца taggable_id INTEGER и taggable_type STRING. |
$table->nullableMorphs('taggable'); | Аналогично morphs() , но разрешено значение NULL. |
$table->nullableTimestamps(); | Аналогично timestamps() , но разрешено значение NULL. |
$table->rememberToken(); | Добавление столбца remember_token как VARCHAR(100) NULL. |
$table->smallIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED SMALL INTEGER". |
$table->smallInteger('votes'); | Эквивалент SMALLINT для базы данных. |
$table->softDeletes(); | Добавление столбца deleted_at для мягкого удаления с разрешенным значением NULL. |
$table->string('email'); | Эквивалент VARCHAR. |
$table->string('name', 100); | Эквивалент VARCHAR с длиной. |
$table->text('description'); | Эквивалент TEXT для базы данных. |
$table->time('sunrise'); | Эквивалент TIME для базы данных. |
$table->timeTz('sunrise'); | Эквивалент TIME (с часовым поясом) для базы данных. |
$table->tinyInteger('numbers'); | Эквивалент TINYINT для базы данных. |
$table->timestamp('added_on'); | Эквивалент TIMESTAMP для базы данных. |
$table->timestampTz('added_on'); | Эквивалент TIMESTAMP (с часовым поясом) для базы данных. |
$table->timestamps(); | Добавление столбцов created_at и updated_at с разрешенным значением NULL. |
$table->timestampsTz(); | Добавление столбцов created_at и updated_at (с часовым поясом), для которых разрешено значение NULL. |
$table->unsignedBigInteger('votes'); | Эквивалент Unsigned BIGINT для базы данных. |
$table->unsignedInteger('votes'); | Эквивалент Unsigned INT для базы данных. |
$table->unsignedMediumInteger('votes'); | Эквивалент Unsigned MEDIUMINT для базы данных. |
$table->unsignedSmallInteger('votes'); | Эквивалент Unsigned SMALLINT для базы данных. |
$table->unsignedTinyInteger('votes'); | Эквивалент Unsigned TINYINT для базы данных. |
$table->uuid('id'); | Эквивалент UUID для базы данных. |
Модификаторы столбцов
Вдобавок к перечисленным типам столбцов существует несколько "модификаторов" столбцов, которые вы можете использовать при добавлении столбцов в таблицу. Например, чтобы сделать столбец "обнуляемым", используйте метод nullable :
Ниже перечислены все доступные модификаторы столбцов. В этом списке отсутствуют модицикаторы индексов:
Модификатор | Описание |
---|---|
->after('column') | Помещает столбец "после" указанного столбца (только MySQL) |
->comment('my comment') | Добавляет комментарий в столбец |
->default($value) | Указывает значение "по умолчанию" для столбца |
->first() | Помещает столбец "первым" в таблице (только MySQL) |
->nullable() | Разрешает вставлять значения NULL в столбец |
->storedAs($expression) | Создать генерируемый столбец типа stored (только MySQL) |
->unsigned() | Делает столбцы integer беззнаковыми UNSIGNED |
->virtualAs($expression) | Создать генерируемый столбец типа virtual (только MySQL) |
Изменение столбцов
Требования
Перед изменением столбцов добавьте зависимость doctrine/dbal в свой файл composer.json . Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания SQL-запросов, необходимых для выполнения указанных преобразований столбца:
Изменение атрибутов столбца
Метод 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 :
Пока не поддерживается переименование любых столбцов в таблице, содержащей столбцы типов enum .
Удаление столбцов
Для удаления столбца используйте метод 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
По умолчанию Laravel использует набор символов utf8mb4 , который включает поддаржку хранения "эмоджи" в базе данных. Если вы работаете на версии MySQL старее, чем релиз 5.7.7 или версии MariaDB старее, чем релиз 10.2.2, вам может потребоваться вручную настроить длину строки по умолчанию, которая генерируется миграциями. Таким образом, MySQL сможет генерировать для них индексы. Это можно настроить вызвав метод Schema::defaultStringLength в вашем AppServiceProvider :
Или же, вы можете включить опцию innodb_large_prefix для своей базы данных. См. документацию своей базы данных для получения инструкций о том, как правильно включить данную опцию.
Удаление индексов
Для удаления индекса необходимо указать его имя. По умолчанию Laravel автоматически назначает имена индексам. Просто соедините имя таблицы, имя столбца-индекса и тип индекса. Ниже приведено несколько примеров:
Команда | Описание |
---|---|
$table->dropPrimary('users_id_primary'); | Удаление первичного ключа из таблицы "users". |
$table->dropUnique('users_email_unique'); | Удаление уникального индекса из таблицы "users". |
$table->dropIndex('geo_state_index'); | Удаление базового индекса из таблицы "geo". |
Если вы передадите массив столбцов в метод для удаления индексов, будет сгенерировано стандартное имя индекса на основе имени таблицы, столбца и типа ключа:
Ограничения внешнего ключа
Laravel также поддерживает создание ограничений для внешнего ключа, которые используются для обеспечения ссылочной целостности на уровне базы данных. Например, давайте определим столбец user_id в таблице posts , который ссылается на столбец id в таблице users :
Вы также можете указать требуемое действие для свойств ограничений "on delete" и "on update":
Для удаления внешнего ключа используйте метод dropForeign . Ограничения внешнего ключа используют те же принципы именования, что и индексы. Итак, мы соединим имя таблицы и столбцов из ограничения, а затем добавим суффикс "_foreign":
Либо вы можете передать значение массива, при этом для удаления будет автоматически использовано стандартное имя ограничения:
Вы можете включить или выключить ограничения внешнего ключа в своих миграциях с помощью следующих методов:
Этот перевод актуален для англоязычной документации на 28.01.2017 (ветка 5.3) , 08.12.2016 (ветка 5.2) , 19.06.2016 (ветка 5.1) и 08.02.2016 (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Миграции — что-то вроде системы контроля версий для вашей базы данных. Они позволяют вашей команде изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с построителем структур для более простого обращения с архитектурой вашей базы данных. Если вы когда-нибудь просили коллегу вручную добавить столбец в его локальную БД, значит вы сталкивались с проблемой, которую решают миграции БД.
Фасад Laravel Schema обеспечивает поддержку создания и изменения таблиц в независимости от используемой СУБД из числа тех, что поддерживаются в Laravel.
Создание миграций
Для создания новой миграции используйте Artisan-команду sh make:migration :
Миграция будет помещена в папку database/migrations и будет содержать метку времени, которая позволяет фреймворку определять порядок применения миграций.
Можно также использовать параметры --table и --create для указания имени таблицы и того факта, что миграция будет создавать новую таблицу ( а не изменять существующую — прим. пер. ). Эти параметры просто заранее создают указанную таблицу в создаваемом файле-заглушке миграции:
Если вы хотите указать свой путь для сохранения создаваемых миграций, используйте параметр --path при запуске команды sh make:migration . Этот путь должен быть указан относительно базового пути вашего приложения.
Структура миграций
Класс миграций содержит два метода: PHP up () и PHP down () . Метод PHP up () используется для добавления новых таблиц, столбцов или индексов в вашу БД, а метод PHP down () просто отменяет операции, выполненные методом PHP up () .
В обоих методах вы можете использовать построитель структур Laravel для удобного создания и изменения таблиц. О всех доступных методах построителя структур читайте в его документации. Например, эта миграция создаёт таблицу flights :
Выполнение миграций
Для запуска всех необходимых вам миграций используйте Artisan-команду sh migrate .
Если вы используете виртуальную машину Homestead, вам надо выполнить эту команду на ВМ.
Если при применении миграции вы получаете ошибку «class not found» ( «класс не найден» ), попробуйте выполнить команду sh composer dump-autoload и заново запустить команду sh migrate .
Принудительные миграции в продакшне
Некоторые операции миграций разрушительны, значит они могут привести к потере ваших данных. Для предотвращения случайного запуска этих команд на вашей боевой БД перед их выполнением запрашивается подтверждение. Для принудительного запуска команд без подтверждения используйте ключ sh --force :
Откат миграций
Для отмены изменений, сделанных последней миграцией, используйте команду sh rollback . Эта команда отменит результат последней «партии» миграций, которая может включать несколько файлов миграций:
Вы можете сделать откат определённого числа миграций, указав параметр sh step для команды sh rollback . Например, эта команда откатит последние пять миграций:
Команда sh migrate:reset отменит изменения всех миграций вашего приложения:
Откат всех миграций и их повторное применение одной командой
Команда sh migrate:refresh отменит изменения всех ваших миграций, а затем выполнит команду sh migrate . Эта команда эффективно создаёт заново всю вашу БД:
Вы можете откатить и повторно применить определённое число миграций, указав параметр sh step для команды sh refresh . Например, эта команда откатит и повторно применит последние пять миграций:
Таблицы
Создание таблиц
Для создания новой таблицы БД используйте метод PHP create () фасада Schema . Метод PHP create () принимает два аргумента. Первый — имя таблицы, второй — замыкание, которое получает объект Blueprint , который можно использовать для определения новой таблицы:
Само собой, при создании таблицы вы можете использовать любые методы для работы со столбцами построителя структур.
Проверка существования таблицы/столбца
Вы можете легко проверить существование таблицы или столбца при помощи методов PHP hasTable () и PHP hasColumn () :
Подключение и подсистема хранения данных
Если вы хотите выполнить операции над структурой через подключение к БД, которое не является вашим основным подключением, используйте метод PHP connection () :
Используйте свойство engine построителя структур, чтобы задать подсистему хранения данных для таблицы:
Переименование/удаление таблиц
Для переименования существующей таблицы используйте метод PHP rename () :
Для удаления существующей таблицы используйте методы PHP drop () и PHP dropIfExists () :
Переименование таблиц с внешними ключами
Перед переименованием таблицы вы должны проверить, что для всех ограничений внешних ключей таблицы есть явные имена в файлах вашей миграции, чтобы избежать автоматического назначения имён на основе принятого соглашения. Иначе имя ограничения внешнего ключа будет ссылаться на имя старой таблицы.
Столбцы
Создание столбцов
Для изменения существующей таблицы мы будем использовать метод PHP table () фасада Schema . Как и метод PHP create () , метод PHP table () принимает два аргумента: имя таблицы и замыкание, которое получает экземпляр Blueprint , который можно использовать для добавления столбцов в таблицу:
Доступные типы столбцов
Разумеется, построитель структур содержит различные типы столбцов, которые вы можете указывать при построении ваших таблиц:
Команда | Описание |
---|---|
$table->bigIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED BIG INTEGER" |
$table->bigInteger('votes'); | Эквивалент BIGINT для базы данных |
$table->binary('data'); | Эквивалент BLOB для базы данных |
$table->boolean('confirmed'); | Эквивалент BOOLEAN для базы данных |
$table->char('name', 4); | Эквивалент CHAR для базы данных |
$table->date('created_at'); | Эквивалент DATE для базы данных |
$table->dateTime('created_at'); | Эквивалент DATETIME для базы данных |
$table->dateTimeTz('created_at'); | Эквивалент DATETIME (с часовым поясом) для базы данных (для версии 5.2 и выше) |
$table->decimal('amount', 5, 2); | Эквивалент DECIMAL с точностью и масштабом |
$table->double('column', 15, 8); | Эквивалент DOUBLE с точностью, всего 15 цифр, после запятой 8 цифр |
$table->enum('choices', ['foo', 'bar']); | Эквивалент ENUM для базы данных |
$table->float('amount', 8, 2); | Эквивалент FLOAT для базы данных, всего 8 знаков, из них 2 после запятой (для версии 5.3 и выше) |
$table->float('amount'); | Эквивалент FLOAT для базы данных (для версии 5.2 и ранее) |
$table->increments('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED INTEGER" |
$table->integer('votes'); | Эквивалент INTEGER для базы данных |
$table->ipAddress('visitor'); | Эквивалент IP-адреса для базы данных (для версии 5.2 и выше) |
$table->json('options'); | Эквивалент JSON для базы данных |
$table->jsonb('options'); | Эквивалент JSONB для базы данных |
$table->longText('description'); | Эквивалент LONGTEXT для базы данных |
$table->macAddress('device'); | Эквивалент MAC-адреса для базы данных (для версии 5.2 и выше) |
$table->mediumIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED MEDIUM INTEGER" (для версии 5.3 и выше) |
$table->mediumInteger('numbers'); | Эквивалент MEDIUMINT для базы данных |
$table->mediumText('description'); | Эквивалент MEDIUMTEXT для базы данных |
$table->morphs('taggable'); | Добавление столбца taggable_id INTEGER (для версии 5.3 и выше Unsigned INTEGER) и taggable_type STRING |
$table->nullableMorphs('taggable'); | Аналогично morphs(), но разрешено значение NULL (для версии 5.3 и выше) |
$table->nullableTimestamps(); | Аналогично timestamps(), но разрешено значение NULL |
$table->rememberToken(); | Добавление столбца remember_token VARCHAR(100) NULL |
$table->smallIncrements('id'); | Инкрементный ID (первичный ключ), использующий эквивалент "UNSIGNED SMALL INTEGER" (для версии 5.3 и выше) |
$table->smallInteger('votes'); | Эквивалент SMALLINT для базы данных |
$table->softDeletes(); | Добавление столбца deleted_at для мягкого удаления (для версии 5.3 и выше разрешено значение NULL) |
$table->string('email'); | Эквивалент VARCHAR |
$table->string('name', 100); | Эквивалент VARCHAR с длинной |
$table->text('description'); | Эквивалент TEXT для базы данных |
$table->time('sunrise'); | Эквивалент TIME для базы данных |
$table->timeTz('sunrise'); | Эквивалент TIME (с часовым поясом) для базы данных (для версии 5.2 и выше) |
$table->tinyInteger('numbers'); | Эквивалент TINYINT для базы данных |
$table->timestamp('added_on'); | Эквивалент TIMESTAMP для базы данных |
$table->timestampTz('added_on'); | Эквивалент TIMESTAMP (с часовым поясом) для базы данных (для версии 5.2 и выше) |
$table->timestamps(); | Добавление столбцов created_at и updated_at (для версии 5.3 и выше разрешено значение NULL) |
$table->timestampsTz(); | Добавление столбцов created_at и updated_at (с часовым поясом), для которых разрешено значение NULL (для версии 5.3 и выше) |
$table->unsignedBigInteger('votes'); | Эквивалент Unsigned BIGINT для базы данных (для версии 5.3 и выше) |
$table->unsignedInteger('votes'); | Эквивалент Unsigned INT для базы данных (для версии 5.3 и выше) |
$table->unsignedMediumInteger('votes'); | Эквивалент Unsigned MEDIUMINT для базы данных (для версии 5.3 и выше) |
$table->unsignedSmallInteger('votes'); | Эквивалент Unsigned SMALLINT для базы данных (для версии 5.3 и выше) |
$table->unsignedTinyInteger('votes'); | Эквивалент Unsigned TINYINT для базы данных (для версии 5.3 и выше) |
$table->uuid('id'); | Эквивалент UUID для базы данных |
Модификаторы столбцов
Вдобавок к перечисленным типам столбцов существует несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбцов в таблицу. Например, чтобы сделать столбец «обнуляемым» , используйте метод PHP nullable () :
Ниже перечислены все доступные модификаторы столбцов. В этом списке отсутствуют модификаторы индексов:
Изменение столбцов
Требования
Перед изменением столбцов добавьте зависимость doctrine/dbal в свой файл composer.json . Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания SQL-запросов, необходимых для выполнения указанных преобразований столбца:
Изменение атрибутов столбца
Метод PHP change () позволяет изменить тип существующего столбца или изменить его атрибуты. Например, если вы захотите увеличить размер строкового столбца name с 25 до 50:
Также мы можем изменить столбец, чтобы он стал «обнуляемым» :
Столбы следующих типов нельзя «изменить» : char, double, enum, mediumInteger, timestamp, tinyInteger, ipAddress, json, jsonb, macAddress, mediumIncrements, morphs, nullableMorphs, nullableTimestamps, softDeletes, timeTz, timestampTz, timestamps, timestampsTz, unsignedMediumInteger, unsignedTinyInteger, uuid .
Пока не поддерживается изменение любых столбцов в таблице, содержащей столбцы типов enum , json или jsonb .
Переименование столбцов
Для переименования столбца используйте метод PHP renameColumn () на построителе структур. Перед переименованием столбца добавьте зависимость doctrine/dbal в свой файл composer.json :
Пока не поддерживается переименование любых столбцов в таблице, содержащей столбцы типов enum , а для версий 5.2 и ранее ещё и json или jsonb .
Удаление столбцов
Для удаления столбца используйте метод PHP dropColumn () на построителе структур. Перед удалением столбцов из базы данных SQLite вам необходимо добавить зависимость doctrine/dbal в ваш файл composer.json и выполнить команду sh composer update для установки библиотеки:
Вы можете удалить несколько столбцов таблицы, передав массив их имён в метод PHP dropColumn () :
Удаление и изменение нескольких столбцов одной миграцией не поддерживается для базы данных SQLite.
Индексы
Создание индексов
Построитель структур поддерживает несколько типов индексов. Сначала давайте посмотрим на пример, в котором задаётся, что значения столбца должны быть уникальными. Для создания индекса мы можем просто сцепить метод PHP unique () с определением столбца:
Другой вариант — создать индекс после определения столбца. Например:
Вы можете даже передать массив столбцов в метод PHP index () для создания сложного индекса:
Laravel автоматически генерирует подходящее имя индекса, но вы можете передать своё значение вторым аргументом метода:
Доступные типы индексов
Команда | Описание |
---|---|
$table->primary('id'); | Добавление первичного ключа |
$table->primary(['first', 'last']); | Добавление составных ключей |
$table->unique('email'); | Добавление уникального индекса |
$table->unique('state', 'my_index_name'); | Добавление своего имени индекса (для версии 5.2 и выше) |
$table->unique(['first', 'last']); | Добавление составного уникального индекса (для версии 5.3 и выше) |
$table->index('state'); | Добавление базового индекса |
Удаление индексов
Для удаления индекса необходимо указать его имя. По умолчанию Laravel автоматически назначает имена индексам. Просто соедините имя таблицы, имя столбца-индекса и тип индекса. Вот несколько примеров:
Команда | Описание |
---|---|
$table->dropPrimary('users_id_primary'); | Удаление первичного ключа из таблицы "users" |
$table->dropUnique('users_email_unique'); | Удаление уникального индекса из таблицы "users" |
$table->dropIndex('geo_state_index'); | Удаление базового индекса из таблицы "geo" |
Если вы передадите массив столбцов в метод для удаления индексов, будет сгенерировано стандартное имя индекса на основе имени таблицы, столбца и типа ключа:
Ограничения внешнего ключа
Laravel также поддерживает создание ограничений для внешнего ключа, которые используются для обеспечения ссылочной целостности на уровне базы данных. Например, давайте определим столбец user_id в таблице posts , который ссылается на столбец id в таблице users :
Вы также можете указать требуемое действие для свойств "on delete" и "on update" ограничений:
Для удаления внешнего ключа используйте метод PHP dropForeign () . Ограничения внешнего ключа используют те же принципы именования, что и индексы. Итак, мы соединим имя таблицы и столбцов из ограничения, а затем добавим суффикс "_foreign" :
Либо вы можете передать значение массива, при этом для удаления будет автоматически использовано стандартное имя ограничения:
Вы можете включить или выключить ограничения внешнего ключа в своих миграциях с помощью следующих методов:
Загрузка начальных данных в БД
Кроме миграций, описанных выше, Laravel также включает в себя механизм наполнения вашей БД начальными данными (seeding) с помощью специальных классов. Все такие классы хранятся в database/seeds . Они могут иметь любое имя, но вам, вероятно, следует придерживаться какой-то логики в их именовании — например, PHP UserTableSeeder и т.д. По умолчанию для вас уже определён класс PHP DatabaseSeeder . Из этого класса вы можете вызывать метод PHP call () для подключения других классов с данными, что позволит вам контролировать порядок их выполнения.
Пример класса для загрузки начальных данных
Для добавления данных в БД используйте Artisan-команду sh db:seed :
По умолчанию команда db:seed вызывает класс PHP DatabaseSeeder , который может быть использован для вызова других классов, заполняющих БД данными. Однако, вы можете использовать параметр sh --class для указания конкретного класса для вызова:
Вы также можете использовать для заполнения БД данными команду sh migrate:refresh , которая также откатит и заново применит все ваши миграции:
Комментарии (8)
Дык не работает же seeds.
и всё заработает.
Вылетает ошибка при миграции!
Ответ нашёл тут:
Помогите, пожалуйста. Изучаю ларавел. Как создать файл с классом CreateFlightsTable . Если ручками, то какое имя давать? Даю имя 2017_11_02_123985_CreateFlightsTable.php при выполнении выдает ошибку Class 'CreateFlightsTable' not found , это всё на вагранте запускается.
Ты миграцию создаешь ?
Вроде всё заработало.
Привет ))
Возможно ли сделать миграцию на две базы данных с разными таблицами?
Читайте также: