Начальные данные
Пустая таблица неудобна для разработки: на странице списка нечего показывать. Сид — класс, который добавляет в таблицу готовые записи. Его запускают командой, поэтому у всех разработчиков получается одинаковый набор данных.
Где лежат
Сиды находятся в папке 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();.