代码之家  ›  专栏  ›  技术社区  ›  Marc Fletcher

无法为prisma数据库生成种子数据

  •  0
  • Marc Fletcher  · 技术社区  · 2 年前

    我正在尝试使用下面的文件生成种子数据。当它运行时,它告诉我journalEntry项目需要一个用户,但我不知道为什么 docs upsert 惯性导航与制导。

    async function main() {
      const food = await prisma.food.upsert({
        where: {
          id: 1,
        },
        create: {
          name: 'Protein shake',
          meal: 'DINNER',
          journalEntry: {
            create: {
             user: { // this is the problem
                create: {id: 1} 
              }
            }
          },
          macros: {
            create: {
              calories: 120,
              protein: 24,
              carbs: 3, 
              fat: 0,
            }
          },
          journalEntryId: 1,
          nutrientProfileId: 1,
        },
      })
      console.log(food);
    }
    

    模型

    model User {
      id                Int             @id @default(autoincrement())
      username          String          @unique
      targetMacros      NutrientProfile @relation(fields: [nutrientProfileId], references: [id])
      journalEntries    JournalEntry[]
      nutrientProfileId Int
    }
    
    model NutrientProfile {
      id       Int    @id @default(autoincrement())
      calories Int    @default(0)
      protein  Int    @default(0)
      carbs    Int    @default(0)
      fat      Int    @default(0)
      User     User[]
      Food     Food[]
    }
    
    model JournalEntry {
      id           Int      @id @default(autoincrement())
      createdAt    DateTime @default(now())
      journalItems Food[]
      notes        String?   @db.VarChar(255)
      user         User    @relation(fields: [userId], references: [id])
      userId       Int
    }
    
    model Food {
      id                Int             @id @default(autoincrement())
      name              String
      macros            NutrientProfile @relation(fields: [nutrientProfileId], references: [id])
      createdAt         DateTime        @default(now())
      journalEntry      JournalEntry?   @relation(fields: [journalEntryId], references: [id])
      journalEntryId    Int?
      nutrientProfileId Int
      meal              Meal
    }
    
    enum Meal {
      BREAKFAST
      LUNCH
      DINNER
      SNACK
    }
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   U Ang    2 年前

    也许作者认为读者已经读完了以前的相关文章。。。。。。。

    普里姆萨的关系

    • 它是模型之间的强关系(模型字段无问号),就用户id而言不能为空。
    model JournalEntry {
      user         User    @relation(fields: [userId], references: [id])
      ...
    }
    
    • 如果您想将userId设置为可选,可以添加一个问号。
    model User {
      id                Int             @id @default(autoincrement())
      journalEntries?    JournalEntry[]
    }
    
    model JournalEntry {
      user?         User    @relation(fields: [userId], references: [id])
      userId        Int
    }
    

    对于您的情况,您可以如上所述更新prisma模型以消除模型之间的强关系来修复错误,也可以先编写代码给种子用户。