Наполнение БД фиктивными данными в Laravel
С помощью миграций мы создаём структуру таблиц - колонки, индексы, связи. Но когда разрабатываем проект, одной структуры мало: нужны ещё тестовые данные, чтобы проверять вывод на странице, формы, фильтры и поиск.
Как получить такие данные в базе? Можно добавить их вручную через PMA. Но это неудобно. Во-первых, скучное занятие - вбивать одни и те же строки снова и снова. Во-вторых, данные в процессе работы портятся: что-то удалили, что-то изменили для теста, и база уже не похожа на исходную.
Более красивое решение - сидеры. Это PHP-классы, которые описывают, какие данные нужно добавить в базу. Код сидера хранят в Git и запускают одной командой - на своём компьютере, у коллеги или после переустановки проекта. База снова наполняется одинаковым набором записей.
Сидеры нужны не только для «фиктивных» данных. Через них добавляют:
- стартовые записи - роли, категории, настройки сайта
- тестовые данные для разработки - пользователи, посты, комментарии
- демо-наполнение, чтобы сразу видеть сайт «живым» после установки
Важно не путать два термина.
Сидер
(seeder, наполнитель) - это класс
в папке
database/seeders/. В нём
описано, что именно вставить
в таблицы. Сид
(seed, посев) - это
запуск сидера: выполнение его кода
и запись данных в базу. Команду
для этого называют db:seed.
Принцип работы простой:
-
вы пишете PHP-код в методе
runкласса-сидера -
в этом методе вызываете вставку
в таблицы - чаще всего через
DBиз Query Builder, позже также через Eloquent и фабрики -
в терминале выполняете
php artisan db:seed -
Laravel находит нужный сидер,
вызывает
run, данные попадают в базу
Сидер не меняет структуру таблиц - за это отвечают миграции. Сидер только добавляет или обновляет строки. Если таблицы ещё нет, сначала нужна миграция, потом сид.
В следующих уроках разберём главный
сидер DatabaseSeeder,
научимся вставлять данные
и запускать db:seed.
Своими словами: зачем нужны сидеры и чем они отличаются от миграций?
Что такое сидер и что такое сид в контексте Laravel?
В какой папке хранятся классы-сидеры?