php artisan create migration

Миграции

Введение

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

Фасад Laravel Schema обеспечивает поддержку создания и изменения таблиц в независимости от используемой СУБД из числа тех, что поддерживаются в Laravel.

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

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

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

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

В обоих методах вы можете использовать построитель структур Laravel для удобного создания и изменения таблиц. О всех доступных методах построителя структур читайте в его документации. Например, эта миграция создаёт таблицу flights :

Выполнение миграций

Если вы используете виртуальную машину Homestead, вам надо выполнить эту команду на ВМ.

Принудительные миграции в продакшне

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

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

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

Таблицы

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

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

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

Вы можете легко проверить существование таблицы или столбца при помощи методов PHP hasTable () и PHP hasColumn () :

Подключение и подсистема хранения данных

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

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

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

Для переименования существующей таблицы используйте метод PHP rename () :

Для удаления существующей таблицы используйте методы PHP drop () и PHP dropIfExists () :

Переименование таблиц с внешними ключами

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

Столбцы

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

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

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

КомандаОписание
$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 для базы данных

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

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

МодификаторОписание
->after(‘column’)Помещает столбец «после» указанного столбца (только MySQL)
->comment(‘my comment’)Добавляет комментарий в столбец (для версии 5.2 и выше)
->default($value)Указывает значение «по умолчанию» для столбца
->first()Помещает столбец «первым» в таблице (только MySQL)
->nullable()Разрешает вставлять значения NULL в столбец
->storedAs($expression)Создать генерируемый столбец типа stored (только MySQL) (для версии 5.3 и выше)
->unsigned()Делает столбцы integer беззнаковыми UNSIGNED
->virtualAs($expression)Создать генерируемый столбец типа virtual (только MySQL) (для версии 5.3 и выше)

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

Требования

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

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

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

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

Для переименования столбца используйте метод PHP renameColumn () на построителе структур. Перед переименованием столбца добавьте зависимость doctrine/dbal в свой файл composer.json :

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

Для удаления столбца используйте метод 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»

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

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

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

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

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

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

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

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

Комментарии (8)

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Дык не работает же seeds.

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Вместо User::create([’email’ => ‘foo@bar.com’]);

используйте DB::table(‘users’)->insert([’email’ => ‘foo@bar.com’]);

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Вылетает ошибка при миграции!

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Вроде всё заработало.

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Привет ))
Возможно ли сделать миграцию на две базы данных с разными таблицами?

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Есть мнение, что для данного решения подойдет вот эта часть документа.

Источник

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». Удаление внешнего ключа:

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

Источник

How to create the migrations for database views using php artisan in Laravel?

Actually, I have managed to create a sql views for Laravel using PHP Artisan using below step.

Step 1. Run below command:

Open the migration file and add the below code:

Step 3. To call and run the SQL Views via Laravel query

Hope that helps. Please let me know if anyone has better solution!!

6 Answers 6

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

I’ve created a package for creating, renaming and dropping views:
https://github.com/staudenmeir/laravel-migration-views

You can provide a query builder instance or an SQL string:

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

You can also try this DB::connection()->getPdo()->exec(«your sql query»); it works

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Write your migration like this, with ‘CREATE OR REPLACE’ in up function:

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

Now that we have a migration in place, all else just works like normal Laravel!

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

php artisan create migration. Смотреть фото php artisan create migration. Смотреть картинку php artisan create migration. Картинка про php artisan create migration. Фото php artisan create migration

after that create a new migration and put the table name role_user and put the code below into this:

Save it and run php artisan migrate. Its finished and now you have many to many relation. After all of this for geting query forexample for related role to a user add your User and Role model to your controler an do like this:

and to show the selected roles into your view write:

Источник

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 ( _id ) и эквивалент столбца VARCHAR ( _type ).

Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения 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) ( _id ) и эквивалент столбца VARCHAR ( _type ).

Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения 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 поддерживает внешние ключи только при создании, а не при изменении таблиц.

Источник

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

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