Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Начальные данные

Пустая таблица неудобна для разработки: на странице списка нечего показывать. Сид — класс, который добавляет в таблицу готовые записи. Его запускают командой, поэтому у всех разработчиков получается одинаковый набор данных.

Где лежат

Сиды находятся в папке config/Seeds. Ими занимается тот же плагин Migrations, что и миграциями.

Создание

bin/cake bake seed Articles

Команда создаёт файл config/Seeds/ArticlesSeed.php с пустым массивом данных.

Файл сида

Заполните массив двумя статьями:

// config/Seeds/ArticlesSeed.php
use Migrations\AbstractSeed;
 
class ArticlesSeed extends AbstractSeed
{
    public function run(): void
    {
        $data = [
            [
                'title' => 'Первая статья',
                'body' => 'Текст первой статьи.',
                'published' => true,
                'created' => '2026-03-01 10:00:00',
                'modified' => '2026-03-01 10:00:00',
            ],
            [
                'title' => 'Вторая статья',
                'body' => 'Текст второй статьи.',
                'published' => false,
                'created' => '2026-03-02 12:30:00',
                'modified' => '2026-03-02 12:30:00',
            ],
        ];
 
        $this->table('articles')->insert($data)->save();
    }
}

Каждый вложенный массив — одна строка таблицы, ключи — имена столбцов. Столбцы created и modified здесь заполняют вручную: сид пишет в базу напрямую, минуя классы таблиц. В свежих версиях плагина родительский класс называется BaseSeed.

Запуск

bin/cake migrations seed --seed ArticlesSeed

В таблице articles появятся две записи. Без ключа --seed команда выполнит все сиды из папки.

Много записей

Данные можно создавать циклом:

public function run(): void
{
    $data = [];
 
    for ($i = 1; $i <= 20; $i++) {
        $data[] = [
            'title' => "Статья №$i",
            'body' => 'Текст статьи.',
            'published' => $i % 3 !== 0,
            'created' => date('Y-m-d H:i:s'),
            'modified' => date('Y-m-d H:i:s'),
        ];
    }
 
    $this->table('articles')->insert($data)->save();
}

Получится двадцать статей, каждая третья — неопубликованная. Такого набора хватит, чтобы проверить постраничный вывод.

Миграция или сид

Что нужноЧем делать
Создать таблицу, добавить столбецМиграция
Заполнить таблицу примерами для разработкиСид
Добавить справочник, без которого сайт не работаетСид, запускаемый при установке

Частая ошибка

В отличие от миграций, сиды не запоминают, что уже выполнялись. Повторный запуск добавит те же записи ещё раз, и в таблице окажутся дубликаты. Перед повторным запуском очищайте таблицу — например, первой строкой метода run(): $this->table('articles')->truncate();.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.