gpt4 book ai didi

swift - 删除 Vapor Fluent Pivot

转载 作者:搜寻专家 更新时间:2023-11-01 07:14:27 25 4
gpt4 key购买 nike

我正在使用 Vapor 编写服务器端 Swift API,使用 Fluent 访问我的 Postgres 数据库。它运行良好,但我有几个关于 Pivots 的问题。

我有一个 Feed 模型和一个 Article 模型。 Feed 包含许多文章,一篇文章可以出现在多个 Fe​​ed 中。这是 Fluent 定义的兄弟关系,我有一个非常适合将文章添加到 Feed 的 Pivot。但是,目前可以将同一篇文章多次添加到同一个 Feed,因为 Feed_Article 数据透视表的主键是它自己的唯一 ID 字段。

我有两个问题:

  1. 如何确定 Pivot 是否已存在?

    • 我是否需要获取 Feed 的同级文章并浏览它们以查看文章的 ID 是否已经存在?好像有点疼。
  2. 如何删除数据透视关系?

    • 即。如何从 Feed 中删除文章?
    • 目前我能做到的唯一方法是编写原始 SQL 以从 Feed_Article 中删除,但这似乎是错误的。

我正在使用 VaporPostgreSQL 驱动程序,所以我不确定所有的 Fluent 实现是否对我可用(例如,我不能使用 UUID id,因为它们还不是这个驱动程序的一部分。)

谢谢大家

--田杰

附加:

我最终创建了一个 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)中有 convenience methodsSiblings 关系上这样做。

例如:

try user.pets.add(newPet)

关于swift - 删除 Vapor Fluent Pivot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42994912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com