【问题标题】:Inner Query Parse内部查询解析
【发布时间】:2020-03-08 20:17:22
【问题描述】:

我试图链接用户创建的与收件人相关联的票,但我没有得到任何回报,我能够从票表中获取票,但内部查询的匹配似乎没有链接。关闭解析文档,我尝试使用内部查询作为链接或桥梁,如下所示:

let innerQuery = PFQuery(className:"Tickets")
        let query = PFQuery(className: "Messages")

        //get all tickets for current user
        innerQuery.whereKey("user", equalTo: PFUser.current()?.objectId as Any)
        //objectId is ticketId in tickets table
        innerQuery.includeKey("objectId")
        //match to ticketId in messages table
        query.whereKey("ticketId", matchesQuery: innerQuery)

        do {
            let returnedObjects = try query.findObjects()
            for object in returnedObjects {
                let sender = object["sender"] as? String
                }
            }
        } catch {

        }

【问题讨论】:

  • 我注意到您用来链接表格的列是字符串而不是指针。指针应该用作其他表的键。

标签: ios swift xcode mongodb parse-platform


【解决方案1】:

首先,当我们需要在 Parse Server 中进行内部查询时,我们会将列保存为指针对象。所以这里需要将Message表中的ticketId列保存为Tickets类的Pointer Class。你可以这样保存:

let pointerObj = [“__type": "Pointer", "className": "Tickets", "objectId": "yourClassObjectId"]
messagePraseObj.setValue(pointerObj, forKey: “ticketId")

之后,您可以使用以下代码来完成您的任务。我在我的项目中使用它。 我用过 iOS SDK 1.17.3 和 swift 4。

    let innerQuery = PFQuery.init(className: "Tickets")
    innerQuery.whereKey("user", equalTo: PFUser.current()?.objectId as Any)

    let query = PFQuery.init(className: "Messages")
    query.whereKey("ticketId", matchesQuery: innerQuery)
    query.includeKey("ticketId")

    query.findObjectsInBackground { (returnedObjects, error) in
        if error == nil && returnedObjects != nil {
            for object in returnedObjects! {
                let ticket = object.value(forKey: "ticketId") as! PFObject
                let sender = ticket.value(forKey: "user") as? String ?? ""
                print("User ID: \(sender)")
            }
        }
    }

欲了解更多信息:https://docs.parseplatform.org/ios/guide/#relational-queries

希望对你有所帮助。

【讨论】:

  • 这很有帮助,谢谢!现在我想我唯一的另一个问题是是否有一种更简单的方法可以从 Messages 表中检索相同的“ticketId”列作为指针,就像我能够将它作为字符串值一样? (即: query.whereKey("ticketId", equalTo: "ticketId31434") )因为我不确定如果我必须对涉及该列而不是作为内部查询的不同查询进行双重过滤,它将如何影响性能。
  • 没关系 - 想通了:query.whereKey("columnName", equalTo: PFObject(withoutDataWithClassName: "ClassName", objectId: "objectid2421")) 以防将来有人偶然发现跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2019-05-25
  • 2011-10-13
  • 2023-04-07
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多