From 76175021180bcd4316aac0a16865c016b6447ed7 Mon Sep 17 00:00:00 2001 From: Rodrigo Pedra Brum Date: Tue, 22 Apr 2025 18:00:57 -0300 Subject: [PATCH 1/2] ensure related models is iterable --- .../Database/Eloquent/Concerns/HasRelationships.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php b/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php index 6893c1284e3f..fc211e179a53 100644 --- a/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php +++ b/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php @@ -1086,7 +1086,11 @@ public function relationLoaded($key) } if ($nestedRelation !== null) { - foreach ($this->$relation as $related) { + $relatedModels = is_iterable($relatedModels = $this->$relation) + ? $relatedModels + : [$relatedModels]; + + foreach ($relatedModels as $related) { if (! $related->relationLoaded($nestedRelation)) { return false; } From 554facae877ac8edc5dd6f49e2c0dec790c73582 Mon Sep 17 00:00:00 2001 From: Rodrigo Pedra Brum Date: Wed, 23 Apr 2025 03:38:10 -0300 Subject: [PATCH 2/2] add test case --- .../Database/EloquentModelRelationLoadedTest.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/Integration/Database/EloquentModelRelationLoadedTest.php b/tests/Integration/Database/EloquentModelRelationLoadedTest.php index 06a0a740d3ba..548a50d11957 100644 --- a/tests/Integration/Database/EloquentModelRelationLoadedTest.php +++ b/tests/Integration/Database/EloquentModelRelationLoadedTest.php @@ -119,6 +119,22 @@ public function testWhenChildRecursiveRelationIsLoaded() $this->assertTrue($model->relationLoaded('twos.threes')); $this->assertTrue($model->relationLoaded('twos.threes.one')); } + + public function testWhenParentRelationIsASingleInstance() + { + $one = One::query()->create(); + $two = $one->twos()->create(); + $three = $two->threes()->create(); + + $model = Three::query() + ->with('two.one') + ->find($three->id); + + $this->assertTrue($model->relationLoaded('two')); + $this->assertTrue($model->two->is($two)); + $this->assertTrue($model->relationLoaded('two.one')); + $this->assertTrue($model->two->one->is($one)); + } } class One extends Model