Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Can't connect a model to anothe model on Prisma

I’m developing a simple project for food ordering and I’m using Node.js, Express, and Prisma as ORM for dealing with SQlite.

This is my actual schema.prisma:

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model Users {
  id        String                     @id @default(uuid())
  email     String
  name      String
  password  String
  admin     Boolean                    @default(false)
  image     String?
  orders    Orders[]
  favorites UsersHasFavoriteProducts[]
  createdAt DateTime                   @default(now()) @map("created_at")
  updatedAt DateTime                   @updatedAt @map("updated_at")

  @@map("users")
}

model UsersHasFavoriteProducts {
  id        String    @id @default(uuid())
  user      Users?    @relation(fields: [userId], references: [id])
  userId    String?   @map("user_id")
  product   Products? @relation(fields: [productId], references: [id])
  productId String?   @map("product_id")
  createdAt DateTime  @default(now()) @map("created_at")
  updatedAt DateTime  @updatedAt @map("updated_at")

  @@map("users_has_favorite_products")
}

model Orders {
  id         String              @id @default(uuid())
  totalPrice Decimal?            @map("total_price")
  payMethod  String              @default("pix") @map("pay_method")
  status     String              @default("payment pending")
  products   OrdersHasProducts[]
  user       Users?              @relation(fields: [userId], references: [id])
  userId     String?             @map("user_id")
  createdAt  DateTime            @default(now()) @map("created_at")
  updatedAt  DateTime            @updatedAt @map("updated_at")

  @@map("orders")
}

model OrdersHasProducts {
  id        String    @id @default(uuid())
  order     Orders?   @relation(fields: [orderId], references: [id])
  orderId   String?   @map("order_id")
  product   Products? @relation(fields: [productId], references: [id])
  productId String?   @map("product_id")
  quantity  Int
  createdAt DateTime  @default(now()) @map("created_at")
  updatedAt DateTime  @updatedAt @map("updated_at")

  @@map("orders_has_products")
}

model Products {
  id          String                     @id @default(uuid())
  name        String
  description String
  price       Decimal
  category    String
  ingredients ProductsHasIngredients[]
  image       String?
  orders      OrdersHasProducts[]
  favorites   UsersHasFavoriteProducts[]
  createdAt   DateTime                   @default(now()) @map("created_at")
  updatedAt   DateTime                   @updatedAt @map("updated_at")

  @@map("products")
}

model ProductsHasIngredients {
  id           String       @id @default(uuid())
  product      Products?    @relation(fields: [productId], references: [id])
  productId    String?      @map("product_id")
  ingredient   Ingredients? @relation(fields: [ingredientId], references: [id])
  ingredientId String?      @map("ingredient_id")
  createdAt    DateTime     @default(now()) @map("created_at")
  updatedAt    DateTime     @updatedAt @map("updated_at")

  @@map("products_has_ingredients")
}

model Ingredients {
  id        String                   @id @default(uuid())
  name      String
  price     Decimal
  quantity  Int
  image     String?
  products  ProductsHasIngredients[]
  createdAt DateTime                 @default(now()) @map("created_at")
  updatedAt DateTime                 @updatedAt @map("updated_at")

  @@map("ingredients")
}

The Controller will receive this JSON:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

{
    "name": "Tomato sandwich",
    "description": "Tomato sandwich",
    "price": "22.00",
    "category": "Main",
    "ingredients": "09ea6c56-a289-474a-ac2a-33ccd7512c6e"
}

And on my repository I have a function for add a product on my database:

async create(name, description, price, category, ingredients) {
    return await prisma.products.create({
      data: {
        name,
        description,
        price,
        category,
        ingredients: {
          connect: { id: ingredients },
        },
      },
    });
  }

But I’m not able to create the relationship with the ingredients table, this error occurs:

The required connected records were not found. Expected 1 records to be connected after connect operation on one-to-many relation 'ProductsToProductsHasIngredients', found 
0.

>Solution :

Basically the Ingredients table do not have the ingredient you wanted to to connect while creating the Product. You can do something like Create or Connect or only create instead of connect.

    ingredients: {
      connectOrCreate: {
        where: {
          id: ingredients,
        },
        create: {
          id: ingredients
          ...otherRequiredFields,
        },
      },
    },
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading