理解和使用Parse多对多关系

时间:2014-04-24 07:48:45

标签: ios parse-platform pfrelation

我在Parse中有2个表,如下所示:

Users:
(PFUsers table with all Parse data)
belongsToGroups (A Parse Relation to Groups which is many to many)

Groups:
groupId
name
groupMembers (A Parse Relation to Users which is also many to many)

我有以下代码:

PFObject *groups = [PFObject objectWithClassName:@"Groups"];
groups[@"name"] = name;
syncUsers[@"isActive"] = [NSNumber numberWithInt:1];
//[groups saveInBackground];

PFUser *current = [PFUser currentUser];
PFRelation *relation = [syncUsers relationforKey:@"groupMembers"];
[relation addObject:current];
[groups saveEventually];

PFRelation *relation2 = [current relationforKey:@"belongsToGroups"];
[relation2 addObject:groups];
[current saveEventually];

首先,前2个代码块工作正常,但是如何更新用户中的关系以便我可以在Parse中查看关系并查看我的组?

二,我是否需要在用户和组中创建关系,以便它可以是多对多?

2 个答案:

答案 0 :(得分:1)

您可以对关系whereKey:equalTo:使用column并将其传递给PFObject。然后,此查询将返回所有具有此学生的“学生”关系的教师对象:

PFQuery *query = [PFQuery queryWithClassName:@"Teacher"];
[query whereKey:@"students" equalTo:student];

在此示例中,学生是PFObjectclassName与“学生”中的关系相匹配。如果这是relation PFUsers并且您正在寻找当前用户的“教师”,那么您将使用:

PFQuery *query = [PFQuery queryWithClassName:@"Teacher"];
[query whereKey:@"students" equalTo:[PFUser currentUser]];

答案 1 :(得分:1)

首先,对于您需要的关系,两个对象都存在于解析数据库中。然后,您必须使用PFRelation对象并使用关系保存对象。

我建议使用CodeCloud来建立关系,以便您可以与Android或Web Apps共享代码。

// Objects
PFObject *student = [PFObject objectWithoutDataWithClassName:@"Student" objectId:@"xauj37H"];

PFObject *teacher = [PFObject objectWithoutDataWithClassName:@"Teacher" objectId:@"xJdcj238"];

// Add a student to the teacher object

// Get the students relation
PFRelation *studentsForTeacher = [teacher relationForKey:@"students"];

// Add a student
[studentsForTeacher addObject:student];

// save the teacher, use InBackground instead 
[teacher save];

// Now add a teacher for the student
PFRelation *teachersForStudent = [student relationForKey:@"teachers"];

[teachersForStudent addObject:teacher];

// Save the student
[student save];

// And now you can query the students of a teacher or the teachers of a student

// Students for a Teacher
PFQuery *studentsQuery = [studentsForTeacher query];

[studentsQuery find];

// Teachers for a Student
PFQuery *teachersQuery = [teachersForStudent query];

[teachersQuery find];