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


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


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

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

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

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

А данные будут те, что пока мы вынесли в шаблоны страниц в секцию content.  Блоки sidebardashboard пока не трогаю – это будут отдельные виджеты, которые я еще не придумал как буду реализовать, пусть пока будут статическими.

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

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

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


Рубрика PHP

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

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