[英]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.