gpt4 book ai didi

swift - 无法创建用于查询嵌套父项的 Fluent ORM 查询

转载 作者:行者123 更新时间:2023-12-04 07:39:56 26 4
gpt4 key购买 nike

我有 3 个表,LastName、MiddleName 和 FirstName... FirstName 的父项是 MiddleNameID,MiddleName 的父项是 LastName.id

模型是这样的

final class LastName: Model, Content {
static let schema = "lastnames"

@ID(key: .id)
var id: UUID?

@Field(key: "name")
var name: String


@Children(for: \.$lastname)
var middle_names: [MiddleName]

init() { }

init(id: UUID? = nil, name: String) {
self.id = id
self.name = name
}
}

final class MiddleName: Model, Content {
static let schema = "middlenames"

@ID(key: .id)
var id: UUID?

@Parent(key: "last_name_id")
var lastname: LastName

@Field(key: "name")
var name: String

@Children(for: \.$middleNameId)
var firstNames: [FirstName]

init() { }

init(id: UUID? = nil, lastname: LastName, name: String ) {
self.id = id
self.lastname = lastname
self.name = name
}
}


final class FirstName: Model, Content {
static let schema = "firstnames"

@ID(key: .id)
var id: UUID?

@Parent(key: "middle_name_id")
var middleNameId: MiddleName


@Field(key: "name")
var name: String


init() { }

init(id: UUID? = nil, middleNameId: MiddleName, name: String) {
self.id = id
self.middleNameId = testBundleId
self.name = name
}
}

我想要这样的查询,例如给我所有姓氏 == Smith 和/或中间 == James 的名字记录...不确定如何使用 Fluent DSL 进行多重连接?或者可能给我所有与中间名和/或姓氏相匹配的名字

如果我必须编写一个 SQL 查询,可能看起来像这样

                  SELECT DISTINCT ON (ln.id, mn.id)
ln.name, mn.name, fn.*
FROM last_name ln
LEFT JOIN middle_name mn ON ln.id = mn.last_name_id
LEFT JOIN first_name fn ON fn.middle_name_id = mn.id
WHERE ( mn.name <> '' AND fn.name <> '' ) AND
(true AND ln.name ~ 'smith')
ORDER BY ln.id, mn.id, fn.id

最佳答案

您可以在 Fluent 查询中执行此操作,例如:

return Lastname.query(on: req)
.filter(\.$name == "Smith")
.with(\.$middle_names) { $0.with(\.$firstnames) }
.all()
.flatMap { wholeNames in
let result = wholeNames.filter { $0.middle_names.contains("James") }
// continue
}

这将为您提供中间名为 James 的所有 Smiths。您可以将其用作 OR 变体的基础。它的工作原理是首先过滤 Smith 的姓氏,然后 with 连接中间名,但闭包确保也连接名字。

我认为没有办法将中间名过滤器构建到查询中,所以我认为您必须按照我所展示的那样进行。

关于swift - 无法创建用于查询嵌套父项的 Fluent ORM 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67542844/

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