Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse - Using relations versus pointers?

I am using Parse as my backend. I have problems setting up the correct relation between objects.

I basically have a class named Post, each post belongs to a user(PFUser), and when fetching a post I want the user info to be fetched along with the post.

@interface Post : PFObject<PFSubclassing>

@property (nonatomic, strong) NSDate *time;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *body;
@property (nonatomic, strong, readonly) PFRelation *user;
// User in backed is defined as a relationship to _user    

@end

// Saving the post
[post.user addObject:[PFUser currentUser];
[post saveInBackground];

This works fine and relates the post to that user, but when I try to fetch the post later, it doesn't seem like I can get an instance of _user from PFRelation.

What is the correct way to handle this? Tried to change PFRelation to PFUser but that would crash because it tries to call save on the PFUser object

like image 807
aryaxt Avatar asked May 04 '14 17:05

aryaxt


1 Answers

A Relation is for when you want a long list of related classes, where an array doesn't work, or when you want to query the related objects as needed and not have the list included every time you load the containing object.

Basically you have 4 options with Parse:

  • Pointer - single reference to another class (1 to 0..1)
  • Array - collection of pointers, loaded with the object every time (1 to 0..n, small lists)
  • Relation - collection of pointers, like a join table in SQL (handled under the covers for you), you must run a query against it to load values (1 to 0..n)
  • Custom join class - really just another object (like many-to-many join in SQL) with a Pointer to each side plus any related information (1..n to 1..n)

In your case a simple Pointer would do what you want.

like image 136
Timothy Walters Avatar answered Nov 15 '22 13:11

Timothy Walters