База данных GraphQL Prisma, позволяющая двум таблицам иметь отношения к одной таблице - PullRequest
0 голосов
/ 26 мая 2019

Мне нужны реляционные таблицы, которые соединяют две разные таблицы с одной таблицей.

type User {
  booking: [Booking!]! @relation(name: "UserToBooking" onDelete: SET_NULL)
}

type Booking {
  owner: User! @relation(name: "UserToBooking", onDelete: SET_NULL)
  renter: [User!]! @relation(name: "UserToBooking", onDelete: SET_NULL)
}

Prisma допускает только одно и то же отношение, поэтому использование двух «UserToBooking» невозможно. Какой лучший способ создать отношение, позволяющее это сделать?

1 Ответ

1 голос
/ 26 мая 2019

У вас должно быть два разных типа бронирования. Я предполагаю, что это что-то вроде соглашения AirBnB, где пользователь может владеть собственностью, которая сдана в аренду, и / или арендовать недвижимость у других. Я думаю, что вы должны указать два разных элемента в вашем типе пользователя, чтобы различать их, а затем иметь отношение к ним. Примерно так:

type User {
  booking: [Booking!]! @relation(name: "UserToBooking" onDelete: CASCADE)
  let: [Booking!]! @relation(name: "UserToLetBooking" onDelete: CASCADE)
}

type Booking {
  owner: User! @relation(name: "UserToLetBooking", onDelete: SET_NULL)
  renter: User! @relation(name: "UserToBooking", onDelete: SET_NULL)
}

Таким образом, в бронировании указывается пользователь, который является арендующим владельцем, и пользователь, который является арендатором. Я также изменил арендатора в бронировании на одного пользователя, потому что я считаю, что в каждом бронировании есть 1 владелец и 1 арендатор. Я также изменил настройку onDelete для типа пользователя, чтобы при удалении пользователя удалялись все его бронирования или предложения. Это типичный пример, но решать вам.

...