php artisan schema dump
Clean Up Migrations and Speed up Tests with the Schema Dump Command
A new schema:dump command will be released with Laravel 8 later this year. This command is useful for existing projects because it removes old migrations you no longer need and speeds up the testing and CI process. Taylor Otwell explains this feature in his pull request:
This PR adds support for a new php artisan schema:dump command, which uses mysqldump or pgdump to dump the current state of your schema to a database/schema/
-schema.mysql file.
When this file exists, and php artisan migrate, or php artisan migrate:fresh is run AND no migrations have run against the database yet (migrations table is empty), this schema file will be loaded into the database first and then any outstanding migrations will be run. This means that effectively this schema file would typically only ever be used during local development or during CI testing. In production, you would typically already have migrations that have run in the past so this schema file would never be triggered.
After running schema:dump runs and the schema dump file exists in the project, you can remove old migrations that have made it to production.
This feature solves two problems:
The command would look like this in your project:
This feature has been merged into master which means it will be available in Laravel 8. To learn more about this feature, the best place to look is the 8.x Schema Dump pull request.
Новинки Laravel 8
Привет, хабр! В преддверии старта курса «Framework Laravel», наш эксперт и по совместительству активный участник российского сообщества Laravel — Виталий Юшкевич, подготовил обзор новинок в Laravel 8. Передаю слово Виталию:
Последний релиз Laravel 8 получился неоднозначным. С одной стороны, появилось много новых инструментов для быстрого старта; улучшена работа фабрик, приведена структура папок в формат «как обычно используется». С другой стороны, в этом релизе существенно изменили подходы к базовой разработке веб-приложений на Laravel, а привычный ui с поддержкой preset бутстрапа и реакта добавляли фиксом отдельной библиотекой после большого количества возмущений со стороны сообщества.
Давайте посмотрим более внимательно на изменения, как они изменят ландшафт разработки приложений на laravel в будущем.
Попробуем установить новую версию Laravel и посмотреть на новинки внимательнее.
Приложение laravel устанавливается с помощью глобально установленного установщика https://github.com/laravel/installer. Если у вас он уже был установлен, то можете изменить зависимость в вашем глобальном composer.json. Он находится по следующему пути:
Актуальная версия для laravel 8:
После сохранения изменений выполните команду:
и после новая версия фреймворка будет доступна.
При создании нового приложения добавился новый флаг:
Об этом инструменте поговорим отдельно, а пока создадим новое приложение.
Для установки и работы laravel 8 подняли требования к минимальной версии php до 7.3. Все требования можно посмотреть по ссылке https://laravel.com/docs/8.x/installation#server-requirements
Изменения
Изменение структуры директорий модели
По многочисленным просьбам комьюнити, все модели по-умолчанию теперь размещаются в директории Models с соответствующим namespace (App\Models).
При этом сохранилась обратная совместимость в работе команды make:model. Если у вас есть директория Models, то при выполнении команды php artisan make:model ModelName новая модель будет автоматически создана в директории Models с соответствующим namespace (App\Models). Если же у вас нет этой директории, то модель создастся в корне app и namespace будет App. Мелочь, а приятно.
Migration Squashing
Со временем проект обрастает большим количеством файлов миграций. Это не очень удобно, если вы хотите посмотреть вашу актуальную схему, либо если вам приходится часто выполнять все миграции.
В Laravel 8 появилась команда schema:dump, которая создает дамп текущей базы в отдельную директорию schema. Если вызвать эту команду с флагом —prune, то все текущие миграции удалятся. При следующих обновлениях базы сначала будет выполняться этот дамп, а затем оставшиеся миграции.
Model Factory Classes
В этом релизе была переработана работа с фабриками. Model factory — это полноценный класс, а вызов фабрики осуществляется через вызов метода модели factory() (* Модель должна использовать трейт HasFactory).
Это существенно упрощает работу с фабриками. Например, теперь гораздо удобнее задавать разные состояния для генерации модели через отдельные методы и при вызове метода make() или create() последовательно применять цепочки состояний. Например,
Улучшена работа со связями. Появились 2 волшебных метода: has и for. Например, если мы хотим создать пользователя с 5 постами, мы можем написать:
Метод for() работает аналогично для отношений BelongsTo
Улучшения в работе Maintenance Mode
У команды php artisan down появились новые флаги:
Если мы зададим параметр secret, например так:
то мы сможем обратиться к сайту по адресу mysite.com/my_secret_down_key, после чего работать с сайтом, как будто он в обычном режиме (выставляется кука). При этом для остальных пользователей приложение будет находится в maintenance режиме.
Параметр render позволяет отобразить шаблон как финальный html код. Этот параметр можно использовать как для отображения кастомного шаблона (задаем наш шаблон), так и использовать отображение рендера страниц ошибок (—render=»errors::503″). Последний вариант использования полезен в следующем — если во время обновления приложения вы выполняете composer update, то ваши зависимости могут поломаться и вывод стандартной заглушки поломаться. Если вы будете использовать render 503 страницы, то вывод не поломается и будет выводится подготовленный заранее шаблон html страницы.
Улучшена работа с Closure-Based Event Listeners
Listeners для событий можно объявлять через замыкания. Такой подход может быть оправданным, когда хочется сэкономить на создании отдельных классов (спорное преимущество, на мой взгляд, но имеет место быть).
Суть улучшения сведена к оптимизациии:
Time Testing helper
Добавлен новый класс Wormhole, который добавляет для тестирование ряд методов, позволяющих гибко менять «текущую дату», от которой мы хотим протестировать. Есть гибкая поддержка (положительные и отрицательные смещения, изменения в разных единицах — от миллисекунд до лет) изменений текущего времени, а также указания точного времени.
Пример из документации:
Улучшена работа rate-limit
В предыдущей версии rate limit задавался на уровне middleware. Начиная с 8 версии управление rate limit перенесено в RouteServiceProvider через замыкания. Существенно улучшена гибкость работы. Теперь в рамках одного midleware можно настроить разные rate limit, а также устанавливать лимиты для пользователей или по ip (например, привелигированным пользователям дать менее жесткие ограничения).
JetStream и изменения frontend
Вместе с этим релизом вышел новый продукт для скаффолдинга на смену пакету UI, динамические компоненты blade. Пожалуй, это одно из самых масштабных изменений этого релиза. Вместе с тем и спорных. Этот пакет обладает достаточно большими возможностями, рассмотрим его подробно в отдельной статье.
Job batching
Фасаду Bus добавили новый метод batch() для обработки блоков задач. Можно контролировать запуск следующих методов после выполнения всех задач. Пример кода из документации:
Другие изменения
Также в этом релизе были добавлены closure для job dispatch, улучшения artisan serve, обновления Routing Namespace и исправления багов. Полный changelog доступ в документации. https://laravel.com/docs/8.x/releases и в репозитории 🙂
Вместо итогов
Этот релиз добавляет удобства в работу, привносит много улучшений. Вместе с тем, нет ощущения, что это был самый сильный релиз Laravel. Изменения по frontend части вызвали достаточно много обсуждений, «вынудив» добавить фиксом старый ui через отдельную библиотеку. Taylor обозначил новый вектор развития фреймворка, с которым многие могут не согласится. Сохранит ли Taylor этот вектор и в следующем релизе? Сохранит ли laravel такие же темпы привлечения людей в свое комьюнити? Время будет единственным судьей.
На этом всё. По ссылке ниже вы можете записаться на бесплатный вебинар, в рамках которого мы подробно расскажем о программе курса и процессе обучения, а также ответим на интересующие вас вопросы.
Laravel 8 — Что нового?
Laravel 8 вышел 8 сентября 2020 года и содержит следующие нововведения и улучшения.
Laravel Jetstream
Laravel Jetstream — это прекрасно сдизайненный каркас приложений для Laravel. Идеальная отправная точка для создания сайтов, которая включает в себя систему регистрации и логина, верификации почты, двухфакторную аутентификацию, управление сессиями, поддержку API через Laravel Sanctum и опциональный менеджмент команды. Laravel Jetstream заменяет и улучшает устаревший каркас аутентификации предыдущих версий Laravel.
Jetstream разработан с использованием Tailwind CSS и предлагает на ваш выбор каркасы Livewire и Inertia.
Каталог моделей
Классы фабрики моделей
Поскольку фабрики моделей теперь являются обычными PHP-классами, то преобразования состояний могут быть записаны как методы класса. Кроме того, при необходимости, вы можете добавить любые другие хелперы в свои фабрики Eloquent-моделей.
После определения метода преобразования состояния мы можем использовать его таким образом:
Чтобы упростить процесс обновления, был выпущен пакет laravel/legacy-factoryies, обеспечивающий в Laravel 8 поддержку предыдущей итерации фабрик моделей.
Обновленные фабрики теперь содержат еще больше функций. Чтобы узнать о них, обратитесь к документации по тестированию баз данных.
Сжатие миграции
По мере создания приложения накапливается все больше и больше миграций. Со временем каталог может стать потенциально огромным из-за сотен файлов миграций. Теперь, если захотите, вы можете «сжать» все свои миграции в один SQL-файл. Для начала выполните команду schema:dump
В результате выполнения этой команды, Laravel запишет файл «схемы» в ваш каталог. Теперь, когда вы попытаетесь перенести свою базу данных, и никакие другие миграции еще не выполнялись, то Laravel сначала запустит SQL-файл схемы. После выполнения команд из файла схемы Laravel выполнит все оставшиеся миграции, которые не были частью дампа.
Пакетирование задач
Функция пакетной обработки задач позволит вам легко выполнять пакет задач, а после его завершения выполнять дополнительные действия.
Чтобы узнать больше о пакетировании задач, смотрите документацию по очередям.
Улучшенное ограничение скорости
Функция ограничения частоты запросов в Laravel стала более гибкой и мощной, при этом сохранив обратную совместимость с API мидлвара throttle прошлой версии.
Поскольку коллбэки ограничителя скорости получают экземпляр входящего HTTP-запроса, то вы можете динамически создать соответствующий ограничитель на основе входящего запроса или аутентифицированного пользователя:
Иногда нужно сегментировать ограничения на некоторое произвольное значение. Например, вы можете разрешить пользователям доступ к заданному маршруту 100 раз в минуту на каждый IP-адрес. Для этого вы можете использовать метод by при задании лимита:
Чтобы узнать больше об ограничителях, смотрите документацию по маршрутизации.
Улучшенный режим обслуживания
В предыдущих версиях Laravel функцию режим обслуживания php artisan down можно было обойти с помощью списка разрешенных IP-адресов. Эта фишка удалена в пользу более простого решения «секрет»/токен.
После перевода приложения в режим обслуживания вы можете перейти на URL-адрес приложения, соответствующий этому токену, и Laravel выдаст вашему браузеру cookie обхода режима обслуживания:
Предварительный рендеринг шаблона режима обслуживания
Когда вы используете команду php artisan down во время развертывания, то ваши пользователи могут иногда сталкиваться с ошибками во время обновления ваших Composer-зависимостей или других компонентов инфраструктуры. Это происходит потому, что предварительно должна подгрузиться значительная часть фреймворка, чтобы определить, находится ли ваше приложение в режиме обслуживания, и отобразить страницу режима обслуживания с помощью механизма шаблонов.
По этой причине теперь Laravel позволяет вам заранее отрендерить шаблон режима обслуживания, который будет возвращен в самом начале цикла запроса. Этот шаблон отображается до загрузки любых зависимостей вашего приложения. Вы можете предварительно выбрать шаблон с помощью опции render команды down :
Добавление Замыканий / Цепочка catch
Динамические Blade-компоненты
Чтобы узнать больше о Blade-компонентах, смотрите документацию.
Улучшения Слушателя Событий (Event Listener)
Кроме того, Слушатели событий, на основе Замыканий теперь могут быть помечены как queueable с помощью функции Illuminate\Events\queueable
Если вы хотите обрабатывать фейлы анонимного слушателя в очереди, то вы можете предоставить Замыкание в метод catch при задании queueable-слушателя:
Хелперы тестирования времени
Улучшение artisan serve
Шаблоны пагинации Tailwind
Пагинатор Laravel теперь по дефолту использует фреймворк Tailwind CSS — настраиваемый, низкоуровневый CSS фреймворк, который предоставляет всё необходимое для создания нестандартных дизайнов без каких-либо раздражающих опциональных стилей, которые не так-то просто было раньше переопределить. Конечно, также остаются доступными шаблоны Bootstrap 3 и 4.
Наш Телеграм-канал — следите за новостями о Laravel.
Задать вопросы по урокам можно на нашем форуме.
Laravel 8 · Примечания к релизу
Схема версионирования
Laravel и другие его собственные пакеты следуют Семантическому Версионированию. Мажорные релизы фреймворка выпускаются каждый год (
сентябрь), тогда как минорные и патч-релизы могут выпускаться каждую неделю. Минорные и патч-релизы никогда не должны содержать критических изменений.
Исключения
Именованные аргументы
В настоящее время функциональные возможности именованных аргументов PHP не подпадают под правила обратной совместимости Laravel. При необходимости мы можем переименовать аргументы функции, чтобы улучшить кодовую базу Laravel. Поэтому использовать именованные аргументы при вызове методов Laravel следует осторожно и с пониманием того, что их имена могут измениться в будущем.
Политика поддержки
Для релизов LTS, таких как Laravel 6, исправления ошибок предоставляются в течение 2 лет, а исправления безопасности – в течение 3 лет. Эти релизы предоставляют самый продолжительный период поддержки и обслуживания. Для основных релизов, исправления ошибок предоставляются в течение 18 месяцев, а исправления безопасности – в течение 2 лет. Для всех дополнительных библиотек, включая Lumen, только последний релиз получает исправления ошибок. Помимо этого, ознакомьтесь с версиями баз данных, которые поддерживает Laravel.
Версия | Дата релиза | Исправление ошибок до | Исправления безопасности до |
---|---|---|---|
6 (LTS) | September 3rd, 2019 | September 7th, 2021 | September 6rd, 2022 |
7 | March 3rd, 2020 | October 6th, 2020 | March 3rd, 2021 |
8 | September 8th, 2020 | April 6th, 2021 | September 8th, 2021 |
Laravel 8
Laravel Jetstream
Laravel Jetstream был написан Taylor Otwell.
Laravel Jetstream это красиво оформленный каркас приложений для Laravel. Jetstream обеспечивает идеальную отправную точку для вашего следующего проекта и включает в себя вход в систему, регистрацию, проверку электронной почты, двухфакторную аутентификацию, управление сессией, поддержку API через Laravel Sanctum и дополнительное командное управление. Laravel Jetstream заменяет и улучшает устаревшую структуру пользовательского интерфейса аутентификации, доступную в предыдущих версиях Laravel.
Jetstream разработан с использованием Tailwind CSS и предлагает на ваш выбор каркасы Livewire или Inertia.
Каталог моделей
Классы фабрики модели
Поскольку фабрики модели теперь являются простыми классами PHP, преобразования состояний могут быть записаны как методы класса. Кроме того, при необходимости вы можете добавить любые другие вспомогательные классы в фабрику модели Eloquent.
После определения метода преобразования состояния мы можем использовать его так:
Чтобы упростить процесс обновления, был выпущен пакет laravel/legacy-factories, обеспечивающий поддержку предыдущей итерации фабрик модели в Laravel 8.x.
Переписанные фабрики Laravel содержат гораздо больше функций, которые, как мы думаем, вам понравятся. Чтобы узнать больше о фабриках моделей, обратитесь к документации по тестированию баз данных.
Сжатие миграций
По мере создания приложения вы можете со временем накапливать все больше и больше миграций. Это может привести к тому, что каталог миграций станет раздутым из-за потенциально сотен миграций. Если вы используете MySQL или PostgreSQL, теперь вы можете «сжать» свои миграции в один файл SQL. Для начала выполните команду schema:dump :
Когда вы выполните эту команду, Laravel запишет файл «схемы» в каталог database/schema вашего приложения. Теперь, когда вы попытаетесь перенести свою базу данных, Laravel сначала выполнит SQL-операторы файла схемы, при условии, что никакие другие миграции не выполнялись. После выполнения команд файла схемы, Laravel выполнит все оставшиеся миграции, которые не были включены в дамп схемы БД.
Пакетная обработка заданий
Функционал пакетной обработки заданий Laravel позволяет вам легко выполнить пакет заданий, по завершению которого дополнительно совершить определенные действия.
Чтобы узнать больше о пакетной обработки заданий, обратитесь к документации по очередям.
Улучшенное ограничение частоты запросов
Функционал ограничения частоты запросов в Laravel был расширен за счет большей гибкости и возможностей, при этом сохранена обратная совместимость с API посредника throttle предыдущих релизов.
Поскольку замыкание получает экземпляр входящего HTTP-запроса, вы можете динамически создать ограничение на основе входящего запроса или статуса аутентификации пользователя:
Иногда может потребоваться сегментация ограничений по некоторым произвольным значениям. Например, вы можете разрешить пользователям получать доступ к указанному маршруту 100 раз в минуту на каждый IP-адрес. Для этого можно использовать метод by при построении лимита:
Чтобы узнать больше об ограничителях запросов, обратитесь к документации по маршрутизации.
Улучшенный режим обслуживания
В предыдущих релизах Laravel функционал режима обслуживания php artisan down можно было обойти с помощью «разрешенного списка» IP-адресов, имеющим доступ к приложению. Эта функция была удалена в пользу более простого токен-решения.
После перевода приложения в режим обслуживания вы можете перейти по URL-адресу приложения, соответствующему этому токену, и Laravel выдаст вашему браузеру файл cookie обхода режима обслуживания:
При доступе к этому скрытому маршруту вы будете перенаправлены на корневой маршрут приложения. Как только cookie будет отправлен вашему браузеру, вы сможете просматривать приложение в обычном режиме, как если бы оно не находилось в режиме обслуживания.
Предварительный рендеринг шаблона режима обслуживания
Если вы используете команду php artisan down во время развертывания, ваши пользователи могут иногда сталкиваться с ошибками, если они обращаются к приложению во время обновления ваших зависимостей Composer или других компонентов фреймворка. Это происходит потому, что значительная часть фреймворка Laravel должна загружаться, чтобы определить, находится ли ваше приложение в режиме обслуживания, и отобразить шаблон режима обслуживания с помощью механизма шаблонов.
По этой причине Laravel позволяет предварительно визуализировать шаблон режима обслуживания, который будет возвращен в самом начале цикла запроса. Этот шаблон отображается перед загрузкой любых зависимостей вашего приложения. Вы можете выполнить предварительный рендеринг шаблона по вашему выбору, используя параметр render команды down :
Выполнение замыканий с использованием цепочки catch
Динамические компоненты Blade
Иногда может потребоваться отрисовать компонент, но вы не знаете, какой именно компонент это будет до момента выполнения. В этой ситуации вы можете использовать встроенный в Laravel компонент dynamic-component для рендеринга компонента, зависящего от значения или переменной, сформированных во время выполнения приложения:
Чтобы узнать больше о компонентах Blade, обратитесь к документации Blade.
Улучшения слушателей событий
Кроме того, анонимные слушатели событий теперь могут быть помечены как доступные для очереди с помощью функции Illuminate\Events\queueable :
Помощники по временному тестированию
Автор: Taylor Otwell, вдохновленный Ruby on Rails.
Улучшения Artisan serve
Постраничная навигация с использованием Tailwind
Пагинатор Laravel был обновлен для использования фреймворка Tailwind CSS по умолчанию. Tailwind CSS – это настраиваемая низкоуровневая структура CSS, которая дает вам все строительные блоки, необходимые для создания нестандартных дизайнов без каких-либо раздражающих самоуверенных стилей, за которые вам придется бороться. Конечно, также остаются доступными шаблоны Bootstrap 3 и 4.
Обновления пространства имен маршрутизации
Laravel 8 · База данных · Миграции
Введение
Миграции похожи на контроль версий для вашей базы данных, позволяют вашей команде определять схемы базы данных приложения и совместно использовать их определение. Если вам когда-либо приходилось указывать товарищу по команде вручную добавить столбец в его схему локальной базы данных после применения изменений в системе управления версиями, то вы столкнулись с проблемой, которую решает миграция базы данных.
Фасад Schema обеспечивает независимую от базы данных поддержку для создания и управления таблицами во всех поддерживаемых Laravel системах баз данных. В обычной ситуации, этот фасад используется для создания и изменения таблиц / столбцов базы данных во время миграции.
Генерация миграций
Чтобы сгенерировать новую миграцию базы данных, используйте команду make:migration Artisan. Эта команда поместит новый класс миграции в каталог database/migrations вашего приложения. Каждое имя файла миграции содержит временную метку, которая позволяет Laravel определять порядок применения миграций:
Laravel будет использовать имя миграции, чтобы попытаться угадать имя таблицы и будет ли миграция создавать новую таблицу. Если Laravel может определить имя таблицы по имени миграции, то сгенерированный файл миграции будет предварительно заполнен указанной таблицей. В противном случае вы можете просто вручную указать таблицу в файле миграции.
Сжатие миграций
По мере создания приложения вы можете со временем накапливать все больше и больше миграций. Это может привести к тому, что ваш каталог database/migrations станет раздутым из-за потенциально сотен миграций. Если хотите, то можете «сжать» свои миграции в один файл SQL. Для начала выполните команду schema:dump :
Когда вы выполните эту команду, Laravel запишет файл «схемы» в каталог database/schema вашего приложения. Теперь, когда вы попытаетесь перенести свою базу данных, Laravel сначала выполнит SQL-операторы файла схемы, при условии, что никакие другие миграции не выполнялись. После выполнения команд файла схемы, Laravel выполнит все оставшиеся миграции, которые не были включены в дамп схемы БД.
Вы должны передать файл схемы базы данных в систему управления версиями, чтобы другие новые разработчики в вашей команде могли быстро воссоздать исходную структуру базы данных вашего приложения.
Сжатие миграции доступно только для баз данных MySQL, PostgreSQL и SQLite и использует клиент командной строки базы данных. Дампы схемы не могут быть восстановлены в базах данных SQLite, хранимых в памяти.
Структура миграций
Указание соединения миграции
Запуск миграций
Чтобы запустить все незавершенные миграции, выполните команду migrate Artisan:
Если вы хотите узнать, какие миграции уже выполнены, то вы можете использовать команду migrate:status Artisan:
Принудительный запуск миграции в рабочем окружении
Откат миграций
Чтобы откатить последнюю операцию миграции, вы можете использовать команду rollback Artisan. Эта команда откатывает последний «пакет» миграций, который может включать несколько файлов миграции:
Команда migrate:reset откатит все миграции вашего приложения:
Откат и миграция с помощью одной команды
Удаление всех таблиц с последующей миграцией
Команда migrate:fresh удалит все таблицы из базы данных, а затем выполнит команду migrate :
Команда migrate:fresh удалит все таблицы базы данных независимо от их префикса. Эту команду следует использовать с осторожностью при разработке в базе данных, которая используется совместно с другими приложениями.
Таблицы
Создание таблиц
При создании таблицы вы можете использовать любой из методов столбцов построителя схемы для определения столбцов таблицы.
Проверка наличия таблицы / столбца
Соединение с базой данных и параметры таблицы
Если вы хотите выполнить операцию схемы с подключением, которое не является подключением к базе данных по умолчанию для вашего приложения, используйте метод connection :
Кроме того, некоторые другие свойства и методы могут использоваться для определения других аспектов создания таблицы. Свойство engine используется для указания механизма хранения таблицы при использовании MySQL:
Свойства charset и collation могут использоваться для указания набора символов и сопоставления для создаваемой таблицы при использовании MySQL:
Метод temporary используется, чтобы указать, что таблица должна быть «временной». Временные таблицы видны только текущему сеансу соединения базы данных и автоматически удаляются при закрытии соединения:
Обновление таблиц
Переименование / удаление таблиц
Чтобы переименовать существующую таблицу базы данных, используйте метод rename :
Чтобы удалить существующую таблицу, вы можете использовать методы drop или dropIfExists :
Переименование таблиц с внешними ключами
Перед переименованием таблицы вы должны убедиться, что любые ограничения внешнего ключа в таблице имеют явное имя в ваших файлах миграции, вместо того, чтобы позволять Laravel назначать имя на основе соглашения. В противном случае, имя ограничения внешнего ключа будет ссылаться на имя старой таблицы.
Столбцы
Создание столбцов
Доступные типы столбцов
Построитель схем Blueprint предлагает множество методов, соответствующих различным типам столбцов, которые вы можете добавить в таблицы базы данных. Все доступные методы перечислены в таблице ниже:
bigIncrements()
Метод bigIncrements создает эквивалент автоинкрементного столбца UNSIGNED BIGINT (первичный ключ):
bigInteger()
Метод bigInteger создает эквивалент столбца BIGINT :
binary()
Метод binary создает эквивалент столбца BLOB :
boolean()
Метод boolean создает эквивалент столбца BOOLEAN :
Метод char создает эквивалент столбца CHAR указанной длины:
dateTimeTz()
Метод dateTimeTz создает эквивалент столбца DATETIME (с часовым поясом) с необязательной точностью (общее количество цифр):
dateTime()
Метод dateTime создает эквивалент столбца DATETIME с необязательной точностью (общее количество цифр):
Метод date создает эквивалент столбца DATE :
decimal()
Метод decimal создает эквивалент столбца DECIMAL с точностью (общее количество цифр) и масштабом (десятичные цифры):
double()
Метод double создает эквивалент столбца DOUBLE с точностью (общее количество цифр) и масштабом (десятичные цифры):
Метод enum создает эквивалент столбца ENUM с указанием допустимых значений:
float()
Метод float создает эквивалент столбца FLOAT с точностью (общее количество цифр) и масштабом (десятичные цифры):
foreignId()
Метод foreignId является псевдонимом метода unsignedBigInteger :
geometryCollection()
Метод geometryCollection создает эквивалент столбца GEOMETRYCOLLECTION :
geometry()
Метод geometry создает эквивалент столбца GEOMETRY :
increments()
Метод increments создает эквивалент автоинкрементного столбца UNSIGNED INTEGER в качестве первичного ключа:
integer()
Метод integer создает эквивалент столбца INTEGER :
ipAddress()
Метод ipAddress создает эквивалент столбца INTEGER :
Метод json создает эквивалент столбца JSON :
jsonb()
Метод jsonb создает эквивалент столбца JSONB :
lineString()
Метод lineString создает эквивалент столбца LINESTRING :
longText()
Метод longText создает эквивалент столбца LONGTEXT :
macAddress()
Метод macAddress создает столбец, предназначенный для хранения MAC-адреса. Некоторые системы баз данных, такие как PostgreSQL, имеют специальный тип столбца для этого типа данных. Другие системы баз данных будут использовать столбец строкового эквивалента:
mediumIncrements()
Метод mediumIncrements создает эквивалент автоинкрементного столбца UNSIGNED MEDIUMINT в качестве первичного ключа:
mediumInteger()
Метод mediumInteger создает эквивалент столбца MEDIUMINT :
mediumText()
Метод mediumText создает эквивалент столбца MEDIUMTEXT :
morphs()
Метод morphs – это удобный метод, который добавляет эквивалент столбца UNSIGNED BIGINT (
Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения Eloquent. В следующем примере будут созданы столбцы taggable_id и taggable_type :
multiLineString()
Метод multiLineString создает эквивалент столбца MULTILINESTRING :
multiPoint()
Метод multiPoint создает эквивалент столбца MULTIPOINT :
multiPolygon()
Метод multiPolygon создает эквивалент столбца MULTIPOLYGON :
nullableTimestamps()
Метод аналогичен методу timestamps ; тем не менее, создаваемый столбец будет иметь значение NULL:
nullableMorphs()
Метод аналогичен методу morphs ; тем не менее, создаваемый столбец будет иметь значение NULL:
nullableUuidMorphs()
Метод аналогичен методу uuidMorphs ; тем не менее, создаваемый столбец будет иметь значение NULL:
point()
Метод point создает эквивалент столбца POINT :
polygon()
Метод polygon создает эквивалент столбца POLYGON :
rememberToken()
Метод set создает эквивалент столбца SET с заданным списком допустимых значений:
smallIncrements()
Метод smallIncrements создает эквивалент автоинкрементного столбца UNSIGNED SMALLINT в качестве первичного ключа:
smallInteger()
Метод smallInteger создает эквивалент столбца SMALLINT :
softDeletesTz()
softDeletes()
string()
Метод string создает эквивалент столбца VARCHAR указанной длины:
Метод text создает эквивалент столбца TEXT :
timeTz()
Метод timeTz создает эквивалент столбца TIME (с часовым поясом) с необязательной точностью (общее количество цифр):
Метод time создает эквивалент столбца TIME с необязательной точностью (общее количество цифр):
timestampTz()
Метод timestampTz создает эквивалент столбца TIMESTAMP (с часовым поясом) с необязательной точностью (общее количество цифр):
timestamp()
Метод timestamp создает эквивалент столбца TIMESTAMP с необязательной точностью (общее количество цифр):
timestampsTz()
timestamps()
Метод timestamps method creates created_at and updated_at TIMESTAMP с необязательной точностью (общее количество цифр):
tinyIncrements()
Метод tinyIncrements создает эквивалент автоинкрементного столбца UNSIGNED TINYINT в качестве первичного ключа:
tinyInteger()
Метод tinyInteger создает эквивалент столбца TINYINT :
unsignedBigInteger()
Метод unsignedBigInteger создает эквивалент столбца UNSIGNED BIGINT :
unsignedDecimal()
Метод unsignedDecimal создает эквивалент столбца UNSIGNED DECIMAL с необязательной точностью (общее количество цифр) и масштабом (десятичные цифры):
unsignedInteger()
Метод unsignedInteger создает эквивалент столбца UNSIGNED INTEGER :
unsignedMediumInteger()
Метод unsignedMediumInteger создает эквивалент столбца UNSIGNED MEDIUMINT :
unsignedSmallInteger()
Метод unsignedSmallInteger создает эквивалент столбца UNSIGNED SMALLINT :
unsignedTinyInteger()
Метод unsignedTinyInteger создает эквивалент столбца UNSIGNED TINYINT :
uuidMorphs()
Метод uuidMorphs – это удобный метод, который добавляет эквивалент столбца CHAR(36) (
Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения Eloquent, использующего идентификаторы UUID. В следующем примере будут созданы столбцы taggable_id и taggable_type :
Метод uuid создает эквивалент столбца UUID :
Метод year создает эквивалент столбца YEAR :
Модификаторы столбца
В дополнение к типам столбцов, перечисленным выше, есть несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбца в таблицу базы данных. Например, чтобы сделать столбец «допускающим значение NULL», вы можете использовать метод nullable :
В следующей таблице представлены все доступные модификаторы столбцов. В этот список не входят модификаторы индексов:
Модификатор | Описание |
---|---|
->after(‘column’) | Поместить столбец «после» другого столбца (MySQL). |
->autoIncrement() | Установить столбцы INTEGER как автоинкрементные (первичный ключ). |
->charset(‘utf8mb4’) | Указать набор символов для столбца (MySQL). |
->collation(‘utf8mb4_unicode_ci’) | Указать параметры сравнения для столбца (MySQL/PostgreSQL/SQL Server). |
->comment(‘my comment’) | Добавить комментарий к столбцу (MySQL/PostgreSQL). |
->default($value) | Указать значение «по умолчанию» для столбца. |
->first() | Поместить столбец «первым» в таблице (MySQL). |
->from($integer) | Установить начальное значение автоинкрементного поля (MySQL / PostgreSQL). |
->nullable($value = true) | Позволить (по умолчанию) значения NULL для вставки в столбец. |
->storedAs($expression) | Создать сохраненный генерируемый столбец (MySQL). |
->unsigned() | Установить столбцы INTEGER как UNSIGNED (MySQL). |
->useCurrent() | Установить столбцы TIMESTAMP для использования CURRENT_TIMESTAMP в качестве значения по умолчанию. |
->useCurrentOnUpdate() | Установить столбцы TIMESTAMP для использования CURRENT_TIMESTAMP при обновлении записи. |
->virtualAs($expression) | Создать виртуальный генерируемый столбец (MySQL). |
->generatedAs($expression) | Создать столбец идентификаторов с указанными параметрами последовательности (PostgreSQL). |
->always() | Определить приоритет значений последовательности над вводом для столбца идентификаторов (PostgreSQL). |
Выражения для значений по умолчанию
Поддержка выражений по умолчанию зависит от вашего драйвера базы данных, версии базы данных и типа поля. См. документацию к вашей базе данных.
Порядок столбцов
Метод after добавляет набор столбцов после указанного существующего столбца в схеме базы данных MySQL:
Изменение столбцов
Необходимые компоненты
Перед изменением столбца вы должны установить пакет doctrine/dbal с помощью менеджера пакетов Composer. Библиотека Doctrine DBAL используется для определения текущего состояния столбца и для создания запросов SQL, необходимых для внесения запрошенных изменений в столбец:
Обновление атрибутов столбца
Метод change позволяет вам изменять тип и атрибуты существующих столбцов. Например, вы можете увеличить размер string столбца. Чтобы увидеть метод change в действии, давайте увеличим размер столбца name до 50. Для этого мы просто определяем новое состояние столбца и затем вызываем метод change :
Мы также можем изменить столбец, чтобы он допускал значение NULL:
Переименование столбцов
Чтобы переименовать столбец, вы можете использовать метод renameColumn построителя схемы Blueprint. Перед переименованием столбца убедитесь, что вы установили библиотеку doctrine/dbal через менеджер пакетов Composer:
Переименование enum столбца в настоящее время не поддерживается.
Удаление столбцов
Чтобы удалить столбец, вы можете использовать метод dropColumn построителя схемы Blueprint. Если ваше приложение использует базу данных SQLite, то вы должны установить библиотеку doctrine/dbal через менеджер пакетов Composer, прежде чем использовать метод dropColumn :
Вы можете удалить несколько столбцов из таблицы, передав массив имен столбцов методу dropColumn :
Удаление или изменение нескольких столбцов в рамках одной миграции при использовании базы данных SQLite не поддерживается.
Доступные псевдонимы команд
Laravel содержит несколько удобных методов, связанных с удалением общих типов столбцов. Каждый из этих методов описан в таблице ниже:
Индексы
Создание индексов
Построитель схем Laravel поддерживает несколько типов индексов. В следующем примере создается новый столбец email и указывается, что его значения должны быть уникальными. Чтобы создать индекс, мы можем связать метод unique с определением столбца:
В качестве альтернативы вы можете создать индекс после определения столбца. Для этого вы должны вызвать метод unique построителя схемы Blueprint. Этот метод принимает имя столбца, который должен получить уникальный индекс:
Вы даже можете передать массив столбцов методу индекса для создания составного индекса:
При создании индекса Laravel автоматически сгенерирует имя индекса на основе таблицы, имен столбцов и типа индекса, но вы можете передать второй аргумент методу, чтобы указать имя индекса самостоятельно:
Доступные типы индексов
Построитель схем Laravel содержит методы для создания каждого типа индекса, поддерживаемого Laravel. Каждый метод индекса принимает необязательный второй аргумент для указания имени индекса. Если не указано, то имя будет производным от имен таблицы и столбцов, используемых для индекса, а также типа индекса. Все доступные методы индекса описаны в таблице ниже:
Команда | Описание |
---|---|
$table->primary(‘id’); | Добавить первичный ключ. |
$table->primary([‘id’, ‘parent_id’]); | Добавить составной ключ. |
$table->unique(’email’); | Добавить уникальный индекс. |
$table->index(‘state’); | Добавляет простой индекс. |
$table->spatialIndex(‘location’); | Добавляет пространственный индекс (кроме SQLite). |
Длина индекса и MySQL / MariaDB
Кроме того, вы можете включить опцию innodb_large_prefix для своей базы данных. Обратитесь к документации вашей базы данных для получения инструкций о том, как правильно включить эту опцию.
Переименование индексов
Чтобы переименовать индекс, вы можете использовать метод renameIndex построителя схемы Blueprint. Этот метод принимает текущее имя индекса в качестве первого аргумента и желаемое имя в качестве второго аргумента:
Удаление индексов
Чтобы удалить индекс, вы должны указать имя индекса. По умолчанию Laravel автоматически назначает имя индекса на основе имени таблицы, имени индексированного столбца и типа индекса. Вот некоторые примеры:
Если вы передадите массив столбцов в метод, удаляющий индексы, то обычное имя индекса будет сгенерировано на основе имени таблицы, столбцов и типа индекса:
Ограничения внешнего ключа
Поскольку этот синтаксис довольно подробный, Laravel предлагает дополнительные, более сжатые методы, использующие соглашения, для повышения продуктивности разработки. Пример выше можно переписать так:
Вы также можете указать желаемое действие для свойств ограничения «при удалении» и «при обновлении»:
Любые дополнительные модификаторы столбца должны быть вызваны перед методом constrained :
Удаление внешних ключей
Переключение ограничений внешнего ключа
Вы можете включить или отключить ограничения внешнего ключа в своих миграциях, используя следующие методы:
SQLite по умолчанию отключает ограничения внешнего ключа. При использовании SQLite убедитесь, что включили поддержку внешнего ключа в вашей конфигурации базы данных, прежде чем пытаться создать их в ваших миграциях. Кроме того, SQLite поддерживает внешние ключи только при создании, а не при изменении таблиц.