forked from cihadoge/parse-php-sdk-for-codeigniter
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParseRelation.php
More file actions
135 lines (124 loc) · 3.38 KB
/
Copy pathParseRelation.php
File metadata and controls
135 lines (124 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
/**
* ParseRelation - A class that is used to access all of the children of a many-to-many relationship. Each instance
* of ParseRelation is associated with a particular parent object and key.
*
* @package Parse
* @author Mohamed Madbouli <mohamedmadbouli@fb.com>
*/
class ParseRelation {
/**
* @var ParseObject - The parent of this relation.
*/
private $parent;
/**
* @var string - The key of the relation in the parent object.
*/
private $key;
/**
* @var string - The className of the target objects.
*/
private $targetClassName;
/**
* Creates a new Relation for the given parent object, key and class name of target objects.
*
* @param ParseObject $parent The parent of this relation.
* @param string $key The key of the relation in the parent object.
* @param string $targetClassName The className of the target objects.
*/
public function __construct($parent, $key, $targetClassName = null)
{
$this->parent = $parent;
$this->key = $key;
$this->targetClassName = $targetClassName;
}
/**
* Makes sure that this relation has the right parent and key.
*
* @param $parent
* @param $key
*
* @throws \Exception
*/
private function ensureParentAndKey($parent, $key)
{
if (!$this->parent) {
$this->parent = $parent;
}
if (!$this->key) {
$this->key = $key;
}
if ($this->parent != $parent) {
throw new \Exception('Internal Error. Relation retrieved from two different Objects.');
}
if ($this->key != $key) {
throw new \Exception('Internal Error. Relation retrieved from two different keys.');
}
}
/**
* Adds a ParseObject or an array of ParseObjects to the relation.
*
* @param mixed $objects The item or items to add.
*/
public function add($objects)
{
if (!is_array($objects)) {
$objects = [$objects];
}
$operation = new ParseRelationOperation($objects, null);
$this->targetClassName = $operation->_getTargetClass();
$this->parent->_performOperation($this->key, $operation);
}
/**
* Removes a ParseObject or an array of ParseObjects from this relation.
*
* @param mixed $objects The item or items to remove.
*/
public function remove($objects)
{
if (!is_array($objects)) {
$objects = [$objects];
}
$operation = new ParseRelationOperation(null, $objects);
$this->targetClassName = $operation->_getTargetClass();
$this->parent->_performOperation($this->key, $operation);
}
/**
* Returns the target classname for the relation.
*
* @return string
*/
public function getTargetClass()
{
return $this->targetClassName;
}
/**
* Set the target classname for the relation.
*
* @param $className
*/
public function setTargetClass($className)
{
$this->targetClassName = $className;
}
/**
* Set the parent object for the relation.
*
* @param $parent
*/
public function setParent($parent) {
$this->parent = $parent;
}
/**
* Gets a query that can be used to query the objects in this relation.
*
* @return ParseQuery That restricts the results to objects in this relations.
*/
public function getQuery()
{
$query = new ParseQuery($this->targetClassName);
$query->relatedTo('object', $this->parent->_toPointer());
$query->relatedTo('key', $this->key);
return $query;
}
}