我使用Vapor编写服务器端Swift API,使用Fluent访问我的Postgres数据库。它运作良好,但我对Pivots有几个问题。
我有Feed模型和文章模型。 Feed包含许多文章,并且文章可以出现在许多Feed中。这是一个由Fluent定义的兄弟姐妹关系,我有一个Pivot,可以很好地将文章添加到Feeds。但是,由于Feed_Article Pivot表上的主键是它自己的唯一ID字段,因此目前可以多次将同一条添加到同一个Feed中。
我有两个问题:
如何确定Pivot是否已存在?
如何删除Pivot关系?
我使用的是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)
}
}
答案 0 :(得分:2)
您应该像任何其他Fluent对象一样查询,删除等枢轴。
例如:
try Pivot<User, Pet>.query().fiter("user_id", x).delete()
在Fluent 2(撰写本文时为2.0.0-beta.1)Siblings
关系convenience methods为此。
例如:
try user.pets.add(newPet)