Сайт-визитка на Laravel. Этап 6 – заполнения таблиц данными или seeding

При разработке сайта практически всегда нужны какие-то начальные данные, чтобы смоделировать страницы сайта. Очень часто это нужно для постов блогов или новостей, пользователей и так далее. Вот об этом сегодня и поговорим.

Данные для таблицы

Если посмотреть внимательно шаблоны темы, то нам нужно забить в таблицу четыре страницы: главную, контакты, о фирме и услуги. Блог или новости пока не трогаем.

А данные будут те, что пока мы вынесли в шаблоны страниц в секцию 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

Если все было сделано правильно, то теперь в таблице появятся все ваши данные. Как всегда, завтра я выложу полные исходники на гитхаб, чтобы желающие могли глянуть исходники.

Так что теперь можно будет уже заниматься моделями более плотно. Но это уже тема следующей статьи.

Ссылка на основную публикацию