[英]Deleting a Vapor Fluent Pivot
我正在使用Vapor编写服务器端Swift API,并使用Fluent访问我的Postgres数据库。 它运行良好,但是我对Pivots有几个问题。
我有一个Feed模型和一个Article模型。 Feed中包含许多文章,并且文章可以出现在许多Feed中。 这是Fluent定义的同级关系,我有一个Pivot,可以很好地将文章添加到Feed中。 但是,由于Feed_Article Pivot表的主键是它自己的唯一ID字段,因此当前可以多次将同一Article添加到同一Feed中。
我有两个问题:
如何确定数据透视是否已经存在?
如何删除数据透视关系?
我正在使用VaporPostgreSQL驱动程序,所以我不确定所有Fluent实现都对我可用(例如,我不能使用UUID id,因为它们目前还不是该驱动程序的一部分。)
谢谢大家
--TJ
额外:
我最终创建了Pivot扩展。 它可以工作,但是感觉应该有更好的方法来做到这一点。 无论如何,分享以防他人。
extension Pivot {
static func remove(leftId: Node?, rightId: Node?) throws {
/// Get the database driver
guard let db = drop.database?.driver as? PostgreSQLDriver else {
Logger.error("Failed to get database")
return
}
/// Check that we have valid id's
guard let leftId = leftId?.int, let rightId = rightId?.int else {
Logger.error("Invalid id's")
return
}
/// Delete the rows
let sql = "DELETE FROM \(name) WHERE \(left.name)_\(left.idKey) = \(leftId) AND \(right.name)_\(right.idKey) = \(rightId)"
Logger.debug("SQL: \(sql)")
try db.raw(sql)
}
}
您应该能够像其他Fluent对象一样查询,删除等枢轴。
例如:
try Pivot<User, Pet>.query().fiter("user_id", x).delete()
在Fluent 2(撰写本文时为2.0.0-beta.1)中,在Siblings
关系上有方便的方法可以做到这一点。
例如:
try user.pets.add(newPet)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.