【发布时间】:2021-01-19 08:04:36
【问题描述】:
我已经通过 Vapor 4 中的数据透视表 LocaleSite 设置了多对多关系区域设置 站点。这是有效的,我可以将 Locale 附加到 Site,反之亦然。
在数据透视表中,我添加了一个属性.sortOrder:
final class LocaleSite : Model {
static let schema = "locale+site"
struct FieldKeys {
static var createdAt: FieldKey { "created_at" }
static var updatedAt: FieldKey { "updated_at" }
static var deletedAt: FieldKey { "deleted_at" }
static var locale: FieldKey { "localeID" }
static var site: FieldKey { "siteID" }
static var sortOrder: FieldKey { "sortOrder" }
}
@ID
var id: UUID?
@Timestamp(key: FieldKeys.createdAt, on: .create)
var createdAt: Date?
@Timestamp(key: FieldKeys.updatedAt, on: .update)
var updatedAt: Date?
@Timestamp(key: FieldKeys.deletedAt, on: .delete)
var deletedAt: Date?
@Parent(key: FieldKeys.locale)
var locale: Locale
@Parent(key: FieldKeys.site)
var site: Site
@Field(key: FieldKeys.sortOrder)
var sortOrder: Int
附加区域设置数组时
for locale in locales {
let _ = site.$locales.attach(locale, on: database)
}
我想在附加时在同一循环中将.sortOrder 设置为某个值(可能通过附加函数?),但在文档中找不到方法。 p>
(目前唯一的解决方法是在附加后查询我的站点或语言环境,并通过与设置.sortOrder 的数据透视表的关系。非常低效...)
添加了包含一些 Calebs 答案的代码示例(见评论)
static func createStdData (site: Site, database : Database) -> EventLoopFuture<Void> {
return Locale.allLocale(database: database).map { locales in
var order = 0
for locale in locales {
let _ = site.$locales.attach(locale, on: database, edit: { pivot in
pivot.sortOrder = order
})
order += 1
}
}
}
一旦添加了编辑:我就会收到以下错误:
对实例方法“attach”的调用没有完全匹配
检查蒸气源我发现有一个,但显然语法可能不完全正确...
我也试过了:
let _ = site.$locales.attach(locale, on: database, edit: (LocaleSite){ pivot in
pivot.sortOrder = order
})
但我明白了:
没有更多上下文的表达类型是模棱两可的
【问题讨论】:
标签: relationship vapor vapor-fluent