JCC Express

Database

Seeding

Introduction

Seeders populate your database with initial or test data (roles, admin users, fixtures, demo content).

Seeders live in database/seeders and are executed through artisanNode.


Generate a seeder

Bash
bun artisanNode make:seeder UserSeeder

This creates a new seeder class in database/seeders.


Write seeder data

Typical seeder pattern:

TypeScript
import { DB } from "jcc-express-mvc/Eloquent";

export class UserSeeder {
  async run() {
    await DB.table("users").insert([
      { name: "Admin", email: "admin@example.com" },
      { name: "Editor", email: "editor@example.com" },
    ]);
  }
}

Use framework helpers for sensitive values when needed:

TypeScript
const password = await bcrypt("secret");

Run seeders

Run default seeding flow (this executes DatabaseSeeder in database/seeders):

Bash
bun artisanNode db:seed

Run a specific seeder class:

Bash
bun artisanNode db:seed class=UserSeeder

Common workflows

Fresh database + seed

Bash
bun artisanNode migrate:fresh
bun artisanNode db:seed

Queue table + seed app data

Bash
bun artisanNode make:-table
bun artisanNode migrate
bun artisanNode db:seed

Best practices

  • Make seeders idempotent where possible (safe to rerun).
  • Keep production seeders minimal (required baseline data only).
  • Separate large demo/test fixtures from critical app bootstrap data.

Summary

  • Create seeders with make:seeder.
  • Execute with db:seed.
  • Combine with migrations for repeatable environment setup.