@@ -115,7 +115,10 @@ public function relationForeignKeyFromRelationInstance(Relation $relationInstanc
115115 {
116116 $ laravelVersion = (float )app ()->version ();
117117
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 ();
119122 }
120123
121124 /**
@@ -129,15 +132,12 @@ public function relationLocalKeyFromRelationInstance(Relation $relationInstance)
129132 switch (get_class ($ relationInstance )) {
130133 case HasOne::class:
131134 case MorphOne::class:
132- return $ relationInstance ->getParent ()->getTable ().'. ' .$ relationInstance ->getLocalKeyName ();
133- break ;
135+ return $ relationInstance ->getParent ()->getTable () . '. ' . $ relationInstance ->getLocalKeyName ();
134136 case BelongsTo::class:
135137 case MorphTo::class:
136138 return $ relationInstance ->getQualifiedOwnerKeyName ();
137- break ;
138139 default :
139140 return $ relationInstance ->getQualifiedLocalKeyName ();
140- break ;
141141 }
142142 }
143143
@@ -146,14 +146,19 @@ public function relationLocalKeyFromRelationInstance(Relation $relationInstance)
146146 *
147147 * @param Collection $entities
148148 * @param array $requestedRelations
149+ * @param string|null $parentRelation
149150 * @param bool $normalized
150151 * @return Collection
151152 */
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 {
154159 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 );
157162 }
158163 );
159164 }
@@ -163,11 +168,16 @@ function ($entity) use ($requestedRelations, $normalized) {
163168 *
164169 * @param Model $entity
165170 * @param array $requestedRelations
171+ * @param string|null $parentRelation
166172 * @param bool $normalized
167173 * @return Model
168174 */
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 {
171181 if (!$ normalized ) {
172182 $ requestedRelations = $ this ->normalizeRequestedRelations ($ requestedRelations );
173183 }
@@ -176,17 +186,27 @@ public function guardRelations(Model $entity, array $requestedRelations, bool $n
176186 ksort ($ relations );
177187
178188 foreach ($ relations as $ relationName => $ relation ) {
179- if ($ relationName === 'pivot ' ) {
189+ if ($ relationName === 'pivot ' || $ relationName === $ parentRelation ) {
180190 continue ;
181191 }
182192
183193 if (!array_key_exists ($ relationName , $ requestedRelations )) {
184194 unset($ relations [$ relationName ]);
185195 } elseif ($ relation !== null ) {
186196 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+ );
188203 } else {
189- $ relation = $ this ->guardRelationsForCollection ($ relation , $ requestedRelations [$ relationName ], true );
204+ $ relation = $ this ->guardRelationsForCollection (
205+ $ relation ,
206+ $ requestedRelations [$ relationName ],
207+ $ relationName ,
208+ true
209+ );
190210 }
191211 }
192212 }
0 commit comments