如何使用 Prisma 创建 4 级嵌套关系
How to create 4-level nested relationship with Prisma
我有 3 种主要类型:公司、服务和专业。每家公司都有一份服务清单。每个服务都有一个专业列表。每个专业都有一个专业(子专业)列表。
Company 1
- Service 1
-- Specialty 1
--- Sub-specialty 1
所以
我正在 Prisma 1.34 上处理这个数据模型:
type Company {
id: ID! @id
name: String! @unique
services: [Service]
}
type Service {
id: ID! @id
name: String! @unique
companies: [Company]! @relation(link: TABLE)
specialties: [Specialty]
}
type Specialty {
id: ID! @id
name: String! @unique
companies: [Company]! @relation(link: TABLE)
services: [Service] @relation(link: TABLE)
sub_specialties: [Specialty] @relation(link: TABLE)
}
我的问题是,当我添加一家公司并在另一家公司为该公司使用相同的服务时,所有其他专业和子专业记录都随该服务一起提供。我想让每个公司的专业和子专业字段都是唯一的,但它们也应该在每个公司的相关服务下。
过去 3 天我一直在努力,如果有任何帮助,我将不胜感激。
如果您致力于嵌套关系,那么您将不得不使 Service
类型具有非唯一名称。这将强制为每个公司创建一个新的 Service
模型,同时仍然允许 Specialty
更通用并更好地重用。
这里的逻辑是,如果有多个 Services
具有相同的名称但具有不同的 Specialty
属性,那么它们是不相同的。
这是我想出的解决方案:我在 ServiceItem
和 SpecialtyItem
表中持有唯一的服务和专业名称。每当我向一家公司添加一个新的 Service
时,我 link 那个 Service
到一个特定的 ServiceItem
是唯一的。 Service
和 Specialty
从 linked ServiceItem
和 SpecialtyItem
接收信息(在这个项目中只有 name
属性)。这样,每当我更新 ServiceItem
或 SpecialtyItem
时,每个公司下的所有相关 Service
和 Specialty
字段都会更新。这是数据模型:
type Company {
id: ID! @id
name: String! @unique
services: [Service]! @relation(onDelete: CASCADE)
}
type ServiceItem {
id: ID! @id
name: String! @unique
}
type Service {
id: ID! @id
info: ServiceItem! @relation(link: INLINE)
company: Company! @relation(link: INLINE)
specialties: [Specialty] @relation(onDelete: CASCADE)
}
type SpecialtyItem {
id: ID! @id
name: String! @unique
}
type Specialty {
id: ID! @id
info: SpecialtyItem! @relation(link: INLINE)
service: Service @relation(link: INLINE)
sub_specialties: [Specialty] @relation(onDelete: CASCADE)
}
我有 3 种主要类型:公司、服务和专业。每家公司都有一份服务清单。每个服务都有一个专业列表。每个专业都有一个专业(子专业)列表。
Company 1
- Service 1
-- Specialty 1
--- Sub-specialty 1
所以 我正在 Prisma 1.34 上处理这个数据模型:
type Company {
id: ID! @id
name: String! @unique
services: [Service]
}
type Service {
id: ID! @id
name: String! @unique
companies: [Company]! @relation(link: TABLE)
specialties: [Specialty]
}
type Specialty {
id: ID! @id
name: String! @unique
companies: [Company]! @relation(link: TABLE)
services: [Service] @relation(link: TABLE)
sub_specialties: [Specialty] @relation(link: TABLE)
}
我的问题是,当我添加一家公司并在另一家公司为该公司使用相同的服务时,所有其他专业和子专业记录都随该服务一起提供。我想让每个公司的专业和子专业字段都是唯一的,但它们也应该在每个公司的相关服务下。
过去 3 天我一直在努力,如果有任何帮助,我将不胜感激。
如果您致力于嵌套关系,那么您将不得不使 Service
类型具有非唯一名称。这将强制为每个公司创建一个新的 Service
模型,同时仍然允许 Specialty
更通用并更好地重用。
这里的逻辑是,如果有多个 Services
具有相同的名称但具有不同的 Specialty
属性,那么它们是不相同的。
这是我想出的解决方案:我在 ServiceItem
和 SpecialtyItem
表中持有唯一的服务和专业名称。每当我向一家公司添加一个新的 Service
时,我 link 那个 Service
到一个特定的 ServiceItem
是唯一的。 Service
和 Specialty
从 linked ServiceItem
和 SpecialtyItem
接收信息(在这个项目中只有 name
属性)。这样,每当我更新 ServiceItem
或 SpecialtyItem
时,每个公司下的所有相关 Service
和 Specialty
字段都会更新。这是数据模型:
type Company {
id: ID! @id
name: String! @unique
services: [Service]! @relation(onDelete: CASCADE)
}
type ServiceItem {
id: ID! @id
name: String! @unique
}
type Service {
id: ID! @id
info: ServiceItem! @relation(link: INLINE)
company: Company! @relation(link: INLINE)
specialties: [Specialty] @relation(onDelete: CASCADE)
}
type SpecialtyItem {
id: ID! @id
name: String! @unique
}
type Specialty {
id: ID! @id
info: SpecialtyItem! @relation(link: INLINE)
service: Service @relation(link: INLINE)
sub_specialties: [Specialty] @relation(onDelete: CASCADE)
}