@@ -88,25 +88,25 @@ |
||
| 88 | 88 | list($relatedField, $valueField, $mapper) = $this->getOtherFieldNameInfo(); |
| 89 | 89 | if ($this->autoTraverse) $this->offsetSetAutotraverse($value, $relatedField, $valueField); |
| 90 | 90 | else if ($this->doUpdateInterMapper($value, $relatedField, $valueField)) { |
| 91 | - $record = $value; |
|
| 91 | + $record = $value; |
|
| 92 | 92 | $record->{$this->parentField} = $value->{$this->intermediateName}->{$this->localField}; |
| 93 | 93 | $record->$valueField = $this->object->{$relatedField}; |
| 94 | 94 | $this->intermediateMapper[] = $record; |
| 95 | 95 | } |
| 96 | 96 | } |
| 97 | 97 | |
| 98 | - private function doUpdateInterMapper($record, $relatedField, $valueField) { |
|
| 99 | - return !(isset($record->{$this->parentField}) && isset($record->{$this->intermediateName}) && |
|
| 100 | - $record->{$this->parentField} == $record->{$this->intermediateName}->{$this->localField} && |
|
| 101 | - $record->$valueField == $this->object->{$relatedField}); |
|
| 102 | - } |
|
| 103 | - |
|
| 104 | - private function offsetSetAutotraverse($value, $relatedField, $valueField) { |
|
| 105 | - $record = new \stdClass; |
|
| 106 | - $record->{$this->parentField} = $value->{$this->localField}; |
|
| 107 | - $record->$valueField = $this->object->{$relatedField}; |
|
| 108 | - $this->intermediateMapper[] = $record; |
|
| 109 | - } |
|
| 98 | + private function doUpdateInterMapper($record, $relatedField, $valueField) { |
|
| 99 | + return !(isset($record->{$this->parentField}) && isset($record->{$this->intermediateName}) && |
|
| 100 | + $record->{$this->parentField} == $record->{$this->intermediateName}->{$this->localField} && |
|
| 101 | + $record->$valueField == $this->object->{$relatedField}); |
|
| 102 | + } |
|
| 103 | + |
|
| 104 | + private function offsetSetAutotraverse($value, $relatedField, $valueField) { |
|
| 105 | + $record = new \stdClass; |
|
| 106 | + $record->{$this->parentField} = $value->{$this->localField}; |
|
| 107 | + $record->$valueField = $this->object->{$relatedField}; |
|
| 108 | + $this->intermediateMapper[] = $record; |
|
| 109 | + } |
|
| 110 | 110 | |
| 111 | 111 | public function offsetUnset($id) { |
| 112 | 112 | //$this->relation->mapper->filter([$relatedField => $this->object->$valueField, $this->relation->parentField => $id])->delete(); |
@@ -37,7 +37,7 @@ discard block |
||
| 37 | 37 | //bit hacky, breaking encapsulation, but simplest way to work out the info for the other side of the many:many relationship. |
| 38 | 38 | private function getOtherFieldNameInfo() { |
| 39 | 39 | if ($this->otherInfo == null) { |
| 40 | - $propertyReader = function($name) {return $this->$name; }; |
|
| 40 | + $propertyReader = function($name) {return $this->$name; }; |
|
| 41 | 41 | |
| 42 | 42 | $reader = $propertyReader->bindTo($this->intermediateMapper, $this->intermediateMapper); |
| 43 | 43 | |
@@ -45,7 +45,7 @@ discard block |
||
| 45 | 45 | $propertyReader = $propertyReader->bindTo($relation, $relation); |
| 46 | 46 | if ($propertyReader('parentField') != $this->parentField) { |
| 47 | 47 | $relation = $relation->getData($this->object); |
| 48 | - $this->otherInfo = [$propertyReader('localField'), $propertyReader('parentField'), $propertyReader('mapper')]; |
|
| 48 | + $this->otherInfo = [$propertyReader('localField'), $propertyReader('parentField'), $propertyReader('mapper')]; |
|
| 49 | 49 | } |
| 50 | 50 | } |
| 51 | 51 | } |
@@ -103,7 +103,7 @@ discard block |
||
| 103 | 103 | |
| 104 | 104 | private function offsetSetAutotraverse($value, $relatedField, $valueField) { |
| 105 | 105 | $record = new \stdClass; |
| 106 | - $record->{$this->parentField} = $value->{$this->localField}; |
|
| 106 | + $record->{$this->parentField} = $value->{$this->localField}; |
|
| 107 | 107 | $record->$valueField = $this->object->{$relatedField}; |
| 108 | 108 | $this->intermediateMapper[] = $record; |
| 109 | 109 | } |
@@ -32,8 +32,12 @@ discard block |
||
| 32 | 32 | list($relatedField, $valueField, $mapper) = $this->getOtherFieldNameInfo(); |
| 33 | 33 | $this->results = $data; |
| 34 | 34 | $this->object = $parentObject; |
| 35 | - if (empty($parentObject->{$relatedField})) return; |
|
| 36 | - foreach ($data as $dt) $this[] = $dt; |
|
| 35 | + if (empty($parentObject->{$relatedField})) { |
|
| 36 | + return; |
|
| 37 | + } |
|
| 38 | + foreach ($data as $dt) { |
|
| 39 | + $this[] = $dt; |
|
| 40 | + } |
|
| 37 | 41 | } |
| 38 | 42 | |
| 39 | 43 | //bit hacky, breaking encapsulation, but simplest way to work out the info for the other side of the many:many relationship. |
@@ -88,8 +92,9 @@ discard block |
||
| 88 | 92 | |
| 89 | 93 | public function offsetSet($name, $value) { |
| 90 | 94 | list($relatedField, $valueField, $mapper) = $this->getOtherFieldNameInfo(); |
| 91 | - if ($this->autoTraverse) $this->offsetSetAutotraverse($value, $relatedField, $valueField); |
|
| 92 | - else if ($this->doUpdateInterMapper($value, $relatedField, $valueField)) { |
|
| 95 | + if ($this->autoTraverse) { |
|
| 96 | + $this->offsetSetAutotraverse($value, $relatedField, $valueField); |
|
| 97 | + } else if ($this->doUpdateInterMapper($value, $relatedField, $valueField)) { |
|
| 93 | 98 | $record = $value; |
| 94 | 99 | $record->{$this->parentField} = $value->{$this->intermediateName}->{$this->localField}; |
| 95 | 100 | $record->$valueField = $this->object->{$relatedField}; |