我目前正在将Vapor用于数据库,遇到了我可以寻求帮助的障碍。
我当前有一个Business
对象,其中有[AccessPoint]
个孩子。每个AccessPoint
本身都有多个[AccessPointContactMethod]
。
AccessPointContactMethod
可以通过检查创建父子关系时Vapor设置的AccessPoint
属性来引用其父accessPointID
。
实际上,我使用它来确保在创建新的AccessPointContactMethod
时,如果父AccessPoint
已经有一个具有相同地址的孩子,我们将中止发布请求:
return AccessPointContactMethod.query(on: req).group(.and) { and in
and.filter(\.contactMethodAddress == contactMethod.contactMethodAddress)
and.filter(\.accessPointID == contactMethod.accessPointID)
}.all()
.flatMap(to: AccessPointContactMethod.self) { methods in
if methods.isEmpty {
return contactMethod.save(on: req)
}
else {
let duplicateContactMethodStatus = HTTPResponseStatus.custom(code: 600, reasonPhrase: "Duplicate Contact Method")
throw Abort(duplicateContactMethodStatus)
}
}
所以这导致我遇到了问题。目前,我只检查该AccessPoint
中是否存在重复的地址,但是我要做的是检查属于一个AccessPoint
的所有Business
对象,以及是否存在是包含AccessPoint
且具有相同地址的任何AccessPointContactMethod
,然后我们中止请求。
因此,在我看来,我需要一种方法来访问Business
祖父母对象并遍历[AccessPoint]
子代以查找任何重复项。
蒸气,反应式编程,数据库对我来说都是很新的东西,所以我敢肯定我没有很好地描述这个问题,但是如果有人能够理解我正在尝试做什么并且有任何想法,我会非常感谢!