Skip to content

Commit ee9591e

Browse files
authored
HasOne Existance Check
1 parent 3ac6064 commit ee9591e

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/Contracts/Relationships.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,9 @@ protected function storeRelated($item, array $includes, array $data): void
101101
$this->repository->with($with);
102102

103103
switch ($type) {
104-
case 'HasOne':
104+
case 'HasOne':
105+
$this->processHasOneRelation($relation, $relatedRecords, $item);
106+
break;
105107
case 'HasMany':
106108
$this->processHasRelation($relation, $relatedRecords, $item);
107109
break;
@@ -124,16 +126,31 @@ protected function storeRelatedChild($relatedItem, $data): void
124126
//@todo
125127
}
126128

129+
protected function processHasOneRelation($relation, array $collection, $item): void
130+
{
131+
$foreignKey = $relation->getForeignKeyName();
132+
$localKey = $relation->getLocalKeyName();
133+
134+
$collection[$foreignKey] = $item->getAttribute($localKey);
135+
136+
$existanceCheck = [$foreignKey => $item->getAttribute($localKey)];
137+
138+
$relation->updateOrCreate($existanceCheck, $collection);
139+
}
140+
127141
protected function processHasRelation($relation, array $relatedRecords, $item): void
128142
{
129143
$localKey = $relation->getLocalKeyName();
130144
$foreignKey = $relation->getForeignKeyName();
131145

132146
foreach ($relatedRecords as $relatedRecord) {
133-
$model = clone $relation;
147+
$model = $relation->getRelated();
148+
134149
$relatedRecord[$foreignKey] = $item->getAttribute($localKey);
150+
135151
if (isset($relatedRecord[$localKey])) {
136152
$existanceCheck = [$localKey => $relatedRecord[$localKey]];
153+
137154
$model->updateOrCreate($existanceCheck, $relatedRecord);
138155
} else {
139156
$model->create($relatedRecord);

0 commit comments

Comments
 (0)