@@ -101,7 +101,9 @@ protected function storeRelated($item, array $includes, array $data): void
101
101
$ this ->repository ->with ($ with );
102
102
103
103
switch ($ type ) {
104
- case 'HasOne ' :
104
+ case 'HasOne ' :
105
+ $ this ->processHasOneRelation ($ relation , $ relatedRecords , $ item );
106
+ break ;
105
107
case 'HasMany ' :
106
108
$ this ->processHasRelation ($ relation , $ relatedRecords , $ item );
107
109
break ;
@@ -124,16 +126,31 @@ protected function storeRelatedChild($relatedItem, $data): void
124
126
//@todo
125
127
}
126
128
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
+
127
141
protected function processHasRelation ($ relation , array $ relatedRecords , $ item ): void
128
142
{
129
143
$ localKey = $ relation ->getLocalKeyName ();
130
144
$ foreignKey = $ relation ->getForeignKeyName ();
131
145
132
146
foreach ($ relatedRecords as $ relatedRecord ) {
133
- $ model = clone $ relation ;
147
+ $ model = $ relation ->getRelated ();
148
+
134
149
$ relatedRecord [$ foreignKey ] = $ item ->getAttribute ($ localKey );
150
+
135
151
if (isset ($ relatedRecord [$ localKey ])) {
136
152
$ existanceCheck = [$ localKey => $ relatedRecord [$ localKey ]];
153
+
137
154
$ model ->updateOrCreate ($ existanceCheck , $ relatedRecord );
138
155
} else {
139
156
$ model ->create ($ relatedRecord );
0 commit comments