如何用蒸气过滤其他孩子的父母?

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

enter image description here

我有此要求:

router.get("/fetchOngoingReleases") { (request) -> Future<[ReleaseOut]> in
        return Release.query(on: request).filter(\.inprogress == true).all().map { releases in
                var result: [ReleaseOut] = []
                for r in releases {
                    var pageEvents: [Event] = []

                    let num = r.releaseUsers.query(on: request).filter(\.user.fbId ~~ "something").count()

                    var needAuthentication: Bool
                    if num == 0 {
                        needAuthentication = true
                    } else {
                        needAuthentication = false
                    }
                    let rOut = ReleaseOut(fbId: r.fbId, name: r.name, purpose: r.purpose, needAuthentication: needAuthentication)
                    result.append(rOut)
                }
                return result
        }
    }
}

它说我无法访问(???)>查询中的releaseUser.user.fbId

这里数据模型:

enter image description here

和代码中


final class Release: Content {
    var id: Int?
    var fbId: String
    var inprogress: Bool?
    var name: String
    var purpose: String

    /// Creates a new `Release`.
    init(id: Int? = nil, fbId: String, name: String, purpose: String = "normal selling") {
        self.id = id
        self.fbId = fbId
        self.name = name
        self.purpose = purpose
    }
}

extension Release {
    var releaseUsers: Children<Release, ReleaseUser> {
        return children(\.releaseId)
    }
}

final class ReleaseUser: Content {
    var id: Int?
    var releaseId: Release.ID
    var userId: User.ID

    init(id: Int? = nil, releaseId: Release.ID, userId: User.ID) {
        self.id = id
        self.releaseId = releaseId
        self.userId = userId
    }
}

extension ReleaseUser {
    var user: Parent<ReleaseUser, User> {
        return parent(\.userId)
    }
}

final class User: Content {
    var id: Int?
    var fbId: String
    var name: String

    init(id: Int? = nil, fbId: String, name: String) {
        self.id = id
        self.fbId = fbId
        self.name = name
    }
}
vapor
2个回答
1
投票

[好,所以这里发生了几件事,但是主要概念是您不能像这样跨不同的表跳转-您需要使用JOINReleaseUser表连接到User表格,这样您就可以在fbId

上进行查询

0
投票

尝试将查询更改为:

Release.query(on: request).filter(\.inprogress == true).join(\ReleaseUser.releaseId, to:\Release.Id).join(\ReleaseUser.userId, to:\User.Id).alsoDecode(User.self).all()

alsoDecode将为您提供一个元组,其中第一个位置包含原始Release实例,第二个位置包含相应的User实例。因此,fbId应该可用:

r.1.fbId

根据您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.