призма2 как соотнести один-ко-многим и многие-к-одному?

#prisma #prisma2

Вопрос:

Мне нужна помощь, чтобы понять, как настроить моделирование данных.

Что я пытаюсь сделать, так это :

  • Ссылка на идентификатор группы в модели пользователя. Пользователь может быть только в одной группе, это то, что я сделал ниже.
  • Ссылка в модели группы все пользователи, находящиеся в группе. Вот в чем мне нужна помощь.
 model User {
  id         String   @id @default(uuid())
  email      String   @unique
  role       Role     @default(USER)
  group      Group?   @relation(fields: [group_id], references: [id], onDelete: SetNull) 
  group_id   String   
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt

  @@map("user")
}

model Group {
  id         String   @id @default(uuid())
  name       String
  users      User[]
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
  deleted    Boolean  @default(false)

  @@map("group")
}
 

Как я могу составить этот список пользователей, если у меня уже есть пользователь User[] для связи в модели пользователя ?

(Кстати, я прочитал документ, но я совершенно потерялся…)

Ответ №1:

Я думаю, что ваш код верен, вы можете использовать prisma-клиент для тестирования

Это пример такого отношения

 model Agents {
  id             Int       @id @default(autoincrement()) @db.UnsignedInt
  name           String?   @db.VarChar(255)
  owner          String?   @db.VarChar(255)
  address        String?   @db.Text
  lat            String?   @db.VarChar(10)
  lng            String?   @db.VarChar(10)
  tel            String?   @db.VarChar(13)
  mobile         String?   @db.VarChar(11)
  workTime       String?   @db.VarChar(255)
  province       Provinces @relation(fields: [provinceId], references: [id])
  provinceId     Int       @db.UnsignedInt
  createDateTime DateTime  @default(now()) @db.Timestamp(0)
  updateDateTime DateTime? @db.Timestamp(0)
  @@index([provinceId], name: "provinceId")
  @@map(name: "agents")
}


model Provinces {
  id             Int       @id @default(autoincrement()) @db.UnsignedInt
  name           String?   @db.VarChar(255)
  coords         String?   @db.Text
  createDateTime DateTime  @default(now()) @db.Timestamp(0)
  updateDateTime DateTime? @db.Timestamp(0)
  agents Agents[]
  @@map(name: "provinces")
}
 

Комментарии:

1. Спасибо за ваш ответ, но в моем примере я не понимаю, как я сообщаю модель группы, в которой мне нужен список строк внутри пользователя User[]. Похоже, что эта строка здесь предназначена для ссылки на группу в моих пользователях, но она не предназначена для ссылки на список пользователей в моей группе.

2. Хорошо, я думаю, что начинаю понимать, призма делает это автоматическое отношение, так что мне на самом деле нечего было делать… Я думал, что эта штука была своего рода помощником в создании моих первых отношений. Призма такая умная !

3. Да, prisma очень умна и понятна для понимания, но она очень новая, и ей предстоит очень много работы, чтобы стать лучше