与蒸气4的父子关系

问题描述 投票:0回答:1

我想在Vapor 4中建立LeagueTeam之间的父子关系。我可以很好地创建League,但是当我尝试像这样创建新团队时:

{
    "name": "Chicago Bulls",
    "league_id": "C21827C2-8FAD-4A89-B8D3-A3E62E421258"
}

我遇到此错误:

{
    "error": true,
    "reason": "Value of type 'League' required for key 'league'."
}

我只想用引用Team表中的league_idLeague初始化Leagues。我在Vapor 3中使用了此功能,但在Vapor 4中似乎无法正确使用。

请参见下面的模型和迁移。

League型号:

final class League: Model, Content {

    init() {}
    static let schema = "Leagues"

    @ID(key: .id) var id: UUID?
    @Field(key: .name) var name: String
    @Field(key: .sport) var sport: String

    @Children(for: \.$league) var teams: [Team]

    init(name: String, sport: String) {
        self.name = name
        self.sport = sport
    }

}

Team型号:

final class Team: Model, Content {

    init() {}
    static let schema = "Teams"

    @ID(key: .id) var id: UUID?
    @Field(key: .name) var name: String

    @Parent(key: .leagueId) var league: League

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

}

[CreateLeague迁移:

struct CreateLeague: Migration {

    func prepare(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(League.schema)
            .id()
            .field(.name, .string, .required)
            .field(.sport, .string, .required)
            .create()
    }

    func revert(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(League.schema).delete()
    }

}

[CreateTeam迁移:

struct CreateTeam: Migration {

    func prepare(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(Team.schema)
            .id()
            .field(.name, .string, .required)
            .field(.leagueId, .uuid, .required, .references(League.schema, .id))
            .create()
    }

    func revert(on database: Database) -> EventLoopFuture<Void> {
        return database.schema(Team.schema).delete()
    }

}
swift vapor vapor-fluent
1个回答
0
投票
init(id: UUID? = nil, name: String, leagueId: League.IDValue) throws { self.id = id self.name = name self.$league.id = leagueId }
© www.soinside.com 2019 - 2024. All rights reserved.