在查询中合并两个解析表
Merging Two Parse Tables in a Query
我有两个解析 classes,一个是 "users",一个是用户输入一些评论的地方,比如 "tweets"。在 "users" class 中,每个对象都有两列用户名和照片。在推文中 table 每个对象都有用户名和评论的信息。我需要根据用户名匹配进行合并这两个 table 的查询,最后应该有 3 列,用户名 - 照片 - 评论。如何通过 xcode 中的 swift 执行此操作?然后我将使用结果将其附加为数组并在 table 视图单元格中显示它们。
您应该看看 Parse 1-many 关系。 Here 您可以找到基于 Swift 的代码片段。
基本上,您不会 link 通过关联用户名将用户的推文发送给该用户(这在 SQL 数据库中会发生)。您所做的是将用户对象分配给推文,然后当您有推文时,您可以访问其用户属性及其所有属性。
let user = PFObject(className:"TweetAuthor")
...
let tweet = PFObject(className:"Tweet")
tweet["..."] = ...
tweet["createdBy"] = user
...
let userTweets = PFQuery(className:"Tweet")
tweetQuery.whereKey("createdBy", equalTo: user)
tweetQuery.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
let aTweet = object![...]
let picture = aTweet["createdBy"]["picture"]
...
}
希望对您有所帮助。
编辑:
你应该如何使用上面的代码?
我假设您在应用程序的某个位置创建了一条推文,并且您当前为其分配了一个 'username'(和 'profilePicture' 等):
tweet["userName"] = user["username"]
不分配用户名(字符串),而是分配完整的用户对象:
tweet["createdBy"] = user
(去掉所有代码赋值profilePicture等)
有了这个之后,您可以通过以下方式获取与推文关联的图片:
let picture = aTweet["createdBy"]["picture"]
我使用的下面的代码是当前用户关注的人的信息,并显示他们的推文信息。但是,当用户更新他在用户 table 中的个人资料图片时,推文 table 的过去数据(也包括个人资料图片)不会更新。
func refreshResults() {
followArray.removeAll(keepCapacity: false)
resultsNameArray.removeAll(keepCapacity: false)
resultsUserNameArray.removeAll(keepCapacity: false)
resulltsImageFiles.removeAll(keepCapacity: false)
resultsTweetArray.removeAll(keepCapacity: false)
resultsHasImageArray.removeAll(keepCapacity: false)
resultsTweetImageFiles.removeAll(keepCapacity: false)
resultsTweetType.removeAll(keepCapacity: false)
var followQuery = PFQuery(className: "follow")
followQuery.whereKey("user", equalTo: PFUser.currentUser()!.username!)
followQuery.addDescendingOrder("createdAt")
var objects = followQuery.findObjects()
for object in objects! {
self.followArray.append(object.objectForKey("userToFollow") as! String)
}
var query = PFQuery(className: "tweets")
query.whereKey("userName", containedIn: followArray)
query.addDescendingOrder("createdAt")
query.findObjectsInBackgroundWithBlock {
(objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil {
for object in objects! {
self.resultsNameArray.append(object.objectForKey("profileName") as! String)
self.resultsUserNameArray.append(object.objectForKey("userName") as! String)
self.resulltsImageFiles.append(object.objectForKey("photo") as! PFFile)
self.resultsTweetArray.append(object.objectForKey("tweet") as! String)
self.resultsHasImageArray.append(object.objectForKey("hasImage") as! String)
self.resultsTweetImageFiles.append(object.objectForKey("tweetImage") as? PFFile)
self.resultsTweetType.append(object.objectForKey("tweetType") as! Int)
self.resultsTable.reloadData()
}
self.refresher.endRefreshing()
}
}
}
我无法弄清楚如何在解析来自另一个 table 的对象时记录列。正如您所说,我目前正在将用户名和照片分别记录为每条推文的列。推文代码如下。在解析中,我应该在推文 table 中为此创建一个新列吗?列的类型应该是什么?
var tweetObj = PFObject(className: "tweets")
tweetObj["userName"] = PFUser.currentUser()!.username
tweetObj["profileName"] = PFUser.currentUser()!.valueForKey("profileName") as! String
tweetObj["photo"] = PFUser.currentUser()!.valueForKey("photo") as! PFFile
tweetObj["tweet"] = theTweet
当我尝试将上面的代码更新为下面的代码时出现错误(我在 parse 中将列创建为名称为 createdBy 的对象类型)。
让用户 = PFObject(类名:"TweetAuthor")
var tweetObj = PFObject(className: "tweets")
tweetObj["userName"] = PFUser.currentUser()!.username
tweetObj["profileName"] = PFUser.currentUser()!.valueForKey("profileName") as! String
tweetObj["photo"] = PFUser.currentUser()!.valueForKey("photo") as! PFFile
tweetObj["tweet"] = theTweet
tweetObj["createdBy"] = user
我有两个解析 classes,一个是 "users",一个是用户输入一些评论的地方,比如 "tweets"。在 "users" class 中,每个对象都有两列用户名和照片。在推文中 table 每个对象都有用户名和评论的信息。我需要根据用户名匹配进行合并这两个 table 的查询,最后应该有 3 列,用户名 - 照片 - 评论。如何通过 xcode 中的 swift 执行此操作?然后我将使用结果将其附加为数组并在 table 视图单元格中显示它们。
您应该看看 Parse 1-many 关系。 Here 您可以找到基于 Swift 的代码片段。
基本上,您不会 link 通过关联用户名将用户的推文发送给该用户(这在 SQL 数据库中会发生)。您所做的是将用户对象分配给推文,然后当您有推文时,您可以访问其用户属性及其所有属性。
let user = PFObject(className:"TweetAuthor")
...
let tweet = PFObject(className:"Tweet")
tweet["..."] = ...
tweet["createdBy"] = user
...
let userTweets = PFQuery(className:"Tweet")
tweetQuery.whereKey("createdBy", equalTo: user)
tweetQuery.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
let aTweet = object![...]
let picture = aTweet["createdBy"]["picture"]
...
}
希望对您有所帮助。
编辑:
你应该如何使用上面的代码?
我假设您在应用程序的某个位置创建了一条推文,并且您当前为其分配了一个 'username'(和 'profilePicture' 等):
tweet["userName"] = user["username"]
不分配用户名(字符串),而是分配完整的用户对象:
tweet["createdBy"] = user
(去掉所有代码赋值profilePicture等)
有了这个之后,您可以通过以下方式获取与推文关联的图片:
let picture = aTweet["createdBy"]["picture"]
我使用的下面的代码是当前用户关注的人的信息,并显示他们的推文信息。但是,当用户更新他在用户 table 中的个人资料图片时,推文 table 的过去数据(也包括个人资料图片)不会更新。
func refreshResults() {
followArray.removeAll(keepCapacity: false)
resultsNameArray.removeAll(keepCapacity: false)
resultsUserNameArray.removeAll(keepCapacity: false)
resulltsImageFiles.removeAll(keepCapacity: false)
resultsTweetArray.removeAll(keepCapacity: false)
resultsHasImageArray.removeAll(keepCapacity: false)
resultsTweetImageFiles.removeAll(keepCapacity: false)
resultsTweetType.removeAll(keepCapacity: false)
var followQuery = PFQuery(className: "follow")
followQuery.whereKey("user", equalTo: PFUser.currentUser()!.username!)
followQuery.addDescendingOrder("createdAt")
var objects = followQuery.findObjects()
for object in objects! {
self.followArray.append(object.objectForKey("userToFollow") as! String)
}
var query = PFQuery(className: "tweets")
query.whereKey("userName", containedIn: followArray)
query.addDescendingOrder("createdAt")
query.findObjectsInBackgroundWithBlock {
(objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil {
for object in objects! {
self.resultsNameArray.append(object.objectForKey("profileName") as! String)
self.resultsUserNameArray.append(object.objectForKey("userName") as! String)
self.resulltsImageFiles.append(object.objectForKey("photo") as! PFFile)
self.resultsTweetArray.append(object.objectForKey("tweet") as! String)
self.resultsHasImageArray.append(object.objectForKey("hasImage") as! String)
self.resultsTweetImageFiles.append(object.objectForKey("tweetImage") as? PFFile)
self.resultsTweetType.append(object.objectForKey("tweetType") as! Int)
self.resultsTable.reloadData()
}
self.refresher.endRefreshing()
}
}
}
我无法弄清楚如何在解析来自另一个 table 的对象时记录列。正如您所说,我目前正在将用户名和照片分别记录为每条推文的列。推文代码如下。在解析中,我应该在推文 table 中为此创建一个新列吗?列的类型应该是什么?
var tweetObj = PFObject(className: "tweets")
tweetObj["userName"] = PFUser.currentUser()!.username
tweetObj["profileName"] = PFUser.currentUser()!.valueForKey("profileName") as! String
tweetObj["photo"] = PFUser.currentUser()!.valueForKey("photo") as! PFFile
tweetObj["tweet"] = theTweet
当我尝试将上面的代码更新为下面的代码时出现错误(我在 parse 中将列创建为名称为 createdBy 的对象类型)。
让用户 = PFObject(类名:"TweetAuthor")
var tweetObj = PFObject(className: "tweets")
tweetObj["userName"] = PFUser.currentUser()!.username
tweetObj["profileName"] = PFUser.currentUser()!.valueForKey("profileName") as! String
tweetObj["photo"] = PFUser.currentUser()!.valueForKey("photo") as! PFFile
tweetObj["tweet"] = theTweet
tweetObj["createdBy"] = user