Skip to content

Commit f80ee31

Browse files
authored
Merge pull request #44 from swisnl/issue/43
Fix hydrating of HasOne relations by id using ItemHydrator
2 parents 9ff1982 + 2447be8 commit f80ee31

File tree

2 files changed

+202
-177
lines changed

2 files changed

+202
-177
lines changed

src/ItemHydrator.php

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ protected function fillRelations(ItemInterface $item, array $attributes)
7171

7272
// It is a valid relation
7373
if ($relation instanceof HasOneRelation) {
74-
$this->hydrateHasOneRelation($item, $attributes, $relation, $availableRelation);
74+
$this->hydrateHasOneRelation($attributes, $relation, $availableRelation);
7575
} elseif ($relation instanceof HasManyRelation) {
76-
$this->hydrateHasManyRelation($attributes, $availableRelation, $relation);
76+
$this->hydrateHasManyRelation($attributes, $relation, $availableRelation);
7777
} elseif ($relation instanceof MorphToRelation) {
7878
$this->hydrateMorphToRelation($attributes, $relation, $availableRelation);
7979
} elseif ($relation instanceof MorphToManyRelation) {
@@ -101,26 +101,21 @@ protected function getRelationFromItem(ItemInterface $item, string $availableRel
101101
}
102102

103103
/**
104-
* @param \Swis\JsonApi\Client\Interfaces\ItemInterface $item
105104
* @param array $attributes
106105
* @param \Swis\JsonApi\Client\Relations\HasOneRelation $relation
107106
* @param string $availableRelation
108107
*
109108
* @throws \InvalidArgumentException
110109
*/
111-
protected function hydrateHasOneRelation(
112-
ItemInterface $item,
113-
array $attributes,
114-
HasOneRelation $relation,
115-
string $availableRelation
116-
) {
110+
protected function hydrateHasOneRelation(array $attributes, HasOneRelation $relation, string $availableRelation)
111+
{
117112
if (is_array($attributes[$availableRelation])) {
118113
$relationItem = $this->buildRelationItem($relation, $attributes[$availableRelation]);
119-
$relation->associate($relationItem);
120114
} else {
121-
$relation->setId($attributes[$availableRelation]);
122-
$item->setAttribute($availableRelation.'_id', $attributes[$availableRelation]);
115+
$relationItem = $this->buildRelationItem($relation, ['id' => $attributes[$availableRelation]]);
123116
}
117+
118+
$relation->associate($relationItem);
124119
}
125120

126121
/**
@@ -130,7 +125,7 @@ protected function hydrateHasOneRelation(
130125
*
131126
* @throws \InvalidArgumentException
132127
*/
133-
protected function hydrateHasManyRelation(array $attributes, string $availableRelation, HasManyRelation $relation)
128+
protected function hydrateHasManyRelation(array $attributes, HasManyRelation $relation, string $availableRelation)
134129
{
135130
foreach ($attributes[$availableRelation] as $relationData) {
136131
if (is_array($relationData)) {

0 commit comments

Comments
 (0)