DEV Community


Posted on


Use factory to simplify prisma seed.

Prisma provides the ability to seed data. Once configured, it is convenient to create a seed with the script npx prisma db seed.
However, when you register data with the seed script, you need to enter all the parameters, which is a tedious aspect of preparation.

Let's consider the following table as an example

model User {
  id        Int       @id @default(autoincrement())
  email     String    @unique
  userName  String    @unique
  lastName  String
  firstName String
  school    String

  @@map(name: "users")
Enter fullscreen mode Exit fullscreen mode

In this case, the seed script looks like this

// create bob
const bob = await prisma.user.create({
  create: {
    email: "",
    username: "bob",
    lastName: "curry",
    firstName: "bob",
    school: "demo",

// create Chance
const chance = await prisma.user.create({
  create: {
    email: "",
    username: "chance",
    lastName: "weber",
    firstName: "chance",
    school: "demo",
Enter fullscreen mode Exit fullscreen mode

It may be enough, but it seemed a bit redundant to me. It is tedious to enter the parameters every time.

As a solution, I implemented the factory function using a library such as faker.js, but it's hard to maintain the factory function every time the number of tables or items increases.

So I thought that one of the ideal development flows would be to have a factory function created using npx prisma migrate dev or npx prisma generate, which is executed when a table is added or an item is added in Prisma.

Prisma has a good mechanism called generator, so I used it to create a generator called prisma-factory-generator that creates a factory from Prisma's Scheme.

Using this, we can rewrite the previous seed script to look like this.

// For the sake of clarity, I have omitted imports
// and grammatical descriptions.
const bob = await createUser({ userName: 'bob' })
const chance = await createUser({ userName: 'chance' })
Enter fullscreen mode Exit fullscreen mode

I think Prisma-factory-generator is useful not only for seeding but also for test code, so please try it if you like.
If you have a case where it doesn't work, please send an issue to

Special Thanks

The idea of creating a factory with Prisma generator is based on Chris Ball’s presentation at Prisma Day 2021.

Top comments (0)

We're hiring!

We're Hiring

We're looking for someone who can develop, maintain, and implement our product roadmap and strategy as a Senior Product Manager.

Head here to learn more.