Vapor 4 родительские дочерние отношения - PullRequest
2 голосов
/ 01 апреля 2020

В Vapor 4 я создал пользователя, и у него есть «шестеренка» как таковая:

final class User: Model, Content {

    init() {}

    static var schema: String = "user"

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

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

    @Children(for: \.$user)
        var gear: [Gear]
}


final class Gear: Model, Content {

    init() {}

    static var schema: String = "gear"

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

    @Parent(key: "userId")
    var user: User
}

Затем, когда я получаю эти данные, я делаю:

func index(req: Request) throws -> EventLoopFuture<[User]> {
    return User.query(on: req.db).with(\.$gear).all()
}

Довольно гладко и просто. За исключением того, что ID должен быть UUID, в то время как таблица в базе данных может принимать только тип «текст», поэтому я получаю сообщение об ошибке:

{
    "error": true,
    "reason": "server: operator does not exist: text = uuid (op_error)" 
}

Так что у кого-нибудь есть подсказки, как решить эту проблему?

Структура, которую я хочу получить в ответ, похожа на:

{
    "id": "w32423tsdg3w",
    "name": "username",
    "gear": [{
        "id": "1"
        },
        {
        "id": "2"
        }
    ]
}

1 Ответ

2 голосов
/ 01 апреля 2020

В этом случае ID должно быть установлено как String

@ID(key: .id, generatedBy: .user) var id: String?
...