簡體   English   中英

刪除蒸氣流樞軸

[英]Deleting a Vapor Fluent Pivot

我正在使用Vapor編寫服務器端Swift API,並使用Fluent訪問我的Postgres數據庫。 它運行良好,但是我對Pivots有幾個問題。

我有一個Feed模型和一個Article模型。 Feed中包含許多文章,並且文章可以出現在許多Feed中。 這是Fluent定義的同級關系,我有一個Pivot,可以很好地將文章添加到Feed中。 但是,由於Feed_Article Pivot表的主鍵是它自己的唯一ID字段,因此當前可以多次將同一Article添加到同一Feed中。

我有兩個問題:

  1. 如何確定數據透視是否已經存在?

    • 我是否需要獲取Feed的同級文章,並仔細檢查它們的ID是否已在其中? 似乎有點痛苦。
  2. 如何刪除數據透視關系?

    • IE瀏覽器。 如何從Feed中刪除文章?
    • 目前,我唯一的方法是編寫要從Feed_Article中刪除的原始SQL,但這似乎是錯誤的。

我正在使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM