@@ -115,7 +115,10 @@ public function relationForeignKeyFromRelationInstance(Relation $relationInstanc
115
115
{
116
116
$ laravelVersion = (float )app ()->version ();
117
117
118
- return $ laravelVersion > 5.7 || get_class ($ relationInstance ) === HasOne::class ? $ relationInstance ->getQualifiedForeignKeyName () : $ relationInstance ->getQualifiedForeignKey ();
118
+ return $ laravelVersion > 5.7 || get_class (
119
+ $ relationInstance
120
+ ) === HasOne::class ? $ relationInstance ->getQualifiedForeignKeyName (
121
+ ) : $ relationInstance ->getQualifiedForeignKey ();
119
122
}
120
123
121
124
/**
@@ -129,15 +132,12 @@ public function relationLocalKeyFromRelationInstance(Relation $relationInstance)
129
132
switch (get_class ($ relationInstance )) {
130
133
case HasOne::class:
131
134
case MorphOne::class:
132
- return $ relationInstance ->getParent ()->getTable ().'. ' .$ relationInstance ->getLocalKeyName ();
133
- break ;
135
+ return $ relationInstance ->getParent ()->getTable () . '. ' . $ relationInstance ->getLocalKeyName ();
134
136
case BelongsTo::class:
135
137
case MorphTo::class:
136
138
return $ relationInstance ->getQualifiedOwnerKeyName ();
137
- break ;
138
139
default :
139
140
return $ relationInstance ->getQualifiedLocalKeyName ();
140
- break ;
141
141
}
142
142
}
143
143
@@ -146,14 +146,19 @@ public function relationLocalKeyFromRelationInstance(Relation $relationInstance)
146
146
*
147
147
* @param Collection $entities
148
148
* @param array $requestedRelations
149
+ * @param string|null $parentRelation
149
150
* @param bool $normalized
150
151
* @return Collection
151
152
*/
152
- public function guardRelationsForCollection (Collection $ entities , array $ requestedRelations , bool $ normalized = false ): Collection
153
- {
153
+ public function guardRelationsForCollection (
154
+ Collection $ entities ,
155
+ array $ requestedRelations ,
156
+ ?string $ parentRelation = null ,
157
+ bool $ normalized = false
158
+ ): Collection {
154
159
return $ entities ->transform (
155
- function ($ entity ) use ($ requestedRelations , $ normalized ) {
156
- return $ this ->guardRelations ($ entity , $ requestedRelations , $ normalized );
160
+ function ($ entity ) use ($ requestedRelations , $ parentRelation , $ normalized ) {
161
+ return $ this ->guardRelations ($ entity , $ requestedRelations , $ parentRelation , $ normalized );
157
162
}
158
163
);
159
164
}
@@ -163,11 +168,16 @@ function ($entity) use ($requestedRelations, $normalized) {
163
168
*
164
169
* @param Model $entity
165
170
* @param array $requestedRelations
171
+ * @param string|null $parentRelation
166
172
* @param bool $normalized
167
173
* @return Model
168
174
*/
169
- public function guardRelations (Model $ entity , array $ requestedRelations , bool $ normalized = false ): Model
170
- {
175
+ public function guardRelations (
176
+ Model $ entity ,
177
+ array $ requestedRelations ,
178
+ ?string $ parentRelation = null ,
179
+ bool $ normalized = false
180
+ ): Model {
171
181
if (!$ normalized ) {
172
182
$ requestedRelations = $ this ->normalizeRequestedRelations ($ requestedRelations );
173
183
}
@@ -176,17 +186,27 @@ public function guardRelations(Model $entity, array $requestedRelations, bool $n
176
186
ksort ($ relations );
177
187
178
188
foreach ($ relations as $ relationName => $ relation ) {
179
- if ($ relationName === 'pivot ' ) {
189
+ if ($ relationName === 'pivot ' || $ relationName === $ parentRelation ) {
180
190
continue ;
181
191
}
182
192
183
193
if (!array_key_exists ($ relationName , $ requestedRelations )) {
184
194
unset($ relations [$ relationName ]);
185
195
} elseif ($ relation !== null ) {
186
196
if ($ relation instanceof Model) {
187
- $ relation = $ this ->guardRelations ($ relation , $ requestedRelations [$ relationName ], true );
197
+ $ relation = $ this ->guardRelations (
198
+ $ relation ,
199
+ $ requestedRelations [$ relationName ],
200
+ $ relationName ,
201
+ true
202
+ );
188
203
} else {
189
- $ relation = $ this ->guardRelationsForCollection ($ relation , $ requestedRelations [$ relationName ], true );
204
+ $ relation = $ this ->guardRelationsForCollection (
205
+ $ relation ,
206
+ $ requestedRelations [$ relationName ],
207
+ $ relationName ,
208
+ true
209
+ );
190
210
}
191
211
}
192
212
}
0 commit comments