При разработке сайта практически всегда нужны какие-то начальные данные, чтобы смоделировать страницы сайта. Очень часто это нужно для постов блогов или новостей, пользователей и так далее. Вот об этом сегодня и поговорим.
Данные для таблицы
Если посмотреть внимательно шаблоны темы, то нам нужно забить в таблицу четыре страницы: главную, контакты, о фирме и услуги. Блог или новости пока не трогаем.
А данные будут те, что пока мы вынесли в шаблоны страниц в секцию content
. Блоки sidebar
, dashboard
пока не трогаю – это будут отдельные виджеты, которые я еще не придумал как буду реализовать, пусть пока будут статическими.
Seeding в Laravel
Занесение первоначальных данных в таблицу или seeding в Laravel реализован через класс, а сама вставка происходит через команды artisan. В чем-то это очень похоже на миграции, тем более, что можно отменить сидирование данных.
Можно первоначальные данные и руками забить через команды sql в виде дампа таблиц базы например в phpMyAdmin, но лучше использовать стандартный механизм seeding в Laravel. Особенно, если работаете в команде или на «живом» проекте.
Создание класса для seeding данных
В стандартных командах artisan нет команды для генерации класса для сидирования. Однако в прошлой статье поставили пакет Way/Generators, а там уже есть команда для создания такого класса.
php artisan generate:seed pages
В папке app/database/seeds
появился файлик PagesTableSeeder.php
, где и находится класс для сидирования. Он заточен под другой пакет – Faker для добавления фейковых данных. Пакет очень интересный, советую глянуть на него на сайте github.com, там же есть и документация по нему. Я его уже установил в проекте на vizitka-laravel на github, но сейчас его использовать не будем. Он понадобится позже, когда будем делать ленту новостей/блог.
Поэтому удаляем лишнее и получаем такую заготовку:
<?php class PagesTableSeeder extends Seeder { public function run() { DB::table('pages')->truncate(); Page::create([ ]); } }
Создаем класс модели Page
Про модели я хотел рассказать позже, но тут не получается – код завязан на обращение к модели. Нет, можно, конечно, выкрутиться и через QueryBuilder сделать добавление в таблицу данных. Но зачем? Воспользуемся ORM Laravel – Eloquent.
А для этого нужно создать файл с классом модели.
Для автоматизации есть простое правило: таблица называется по-английски в множественном числе, а модель в единственном. Даже если по логике подошло бы наоборот.
Так что таблица – pages, а модель будет называться page. Для генерации используем артисан:
php artisan generate:model page
В папке app/models
появился файл с нашей моделью — Page.php
. Теперь можно будет легко обращаться к таблице через эту модель. Пока в ней не будем ничего писать, нам достаточно наследуемых свойств и методов класса Eloquent.
Подготовка данных для таблицы
Прежде чем вставить, нам нужно очистить таблицу. Логично? Тогда так и сделаем:
DB::table('pages')->truncate();
Теперь нужно заполнить данные для первой записи. Для тела используем HEREDOC, внутри его я забью многоточием, чтобы статья не разрасталась. Вот что получилось:
Page::create([ 'title' => 'Добро пожаловать на сайт', 'menu' => 'Главная', 'slug' => 'index', 'description' => 'Full description', 'keywords' => 'key1, key2, key3', 'image' => '', 'body' => <<<LOREM … LOREM, 'status' => 'published' ]);
Теперь осталось размножить сколько хотим страниц и исправить данные. Пока никаких проверок нет, так что очень внимательно смотрите за данными, особенно за уникальным полем slug.
При создании записей будет автоматом присвоен id записи с автоинкрементом. Поле create_at тоже автоматом заполнится вместе с полем update_at.
Так же учтите, что отката создания новых записей нет, так что если понадобится что-то изменить, то повторный запуск удалит сначала все в таблице, а потом создаст заново. Но если вы после запуска сидинга руками или программно изменили данные, то все ваши правки потеряются.
Разрешение сидинга
По умолчанию все запрещено и автоматом, как с миграциями, класс с данными не подхватится. Для внесения изменений в таблицу нужно руками внести разрешения классу менять таблицы.
Для этого открываем DatabaseSeeder.php
и дублируем закомментированную строчку. Раскомментируем её и меняем класс на PagesTableSeeder.
$this->call('PagesTableSeeder');
Добавление данных в таблицу
Для добавления данных запустим артисан:
php artisan db:seed
Если все было сделано правильно, то теперь в таблице появятся все ваши данные. Как всегда, завтра я выложу полные исходники на гитхаб, чтобы желающие могли глянуть исходники.
Так что теперь можно будет уже заниматься моделями более плотно. Но это уже тема следующей статьи.