From fb87bde20c4e9a8cca9d53f6ad89b42e5049d521 Mon Sep 17 00:00:00 2001 From: Arif Hoque Date: Thu, 4 Jun 2026 19:00:41 +0600 Subject: [PATCH] Fix many-to-many embedCount() when multiple relations are eager loaded --- src/Phaseolies/Database/Entity/Builder.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Phaseolies/Database/Entity/Builder.php b/src/Phaseolies/Database/Entity/Builder.php index 21f5eab..17f09e1 100644 --- a/src/Phaseolies/Database/Entity/Builder.php +++ b/src/Phaseolies/Database/Entity/Builder.php @@ -1678,7 +1678,9 @@ protected function loadRelationCount(Collection $collection, string $relation, ? $relationType = $firstModel->getLastRelationType(); $relatedModel = $firstModel->getLastRelatedModel(); $foreignKey = $firstModel->getLastForeignKey(); - $localKey = $firstModel->getLastLocalKey(); + $localKey = $relationType === "bindToMany" + ? $firstModel->getKeyName() + : $firstModel->getLastLocalKey(); // Collect all local keys $localKeys = array_map(fn($model) => $model->{$localKey}, $models); @@ -1710,7 +1712,7 @@ protected function loadRelationCount(Collection $collection, string $relation, ? // Set the count on each model $countAttribute = $relation . '_count'; foreach ($models as $model) { - $key = $model->{$localKey}; + $key = $model->getKey(); $model->{$countAttribute} = $counts[$key] ?? 0; } } @@ -1738,7 +1740,6 @@ protected function loadManyToManyCount(Collection $collection, string $relation, $foreignKey = $firstModel->getLastForeignKey(); $relatedKey = $firstModel->getLastRelatedKey(); $pivotTable = $firstModel->getLastPivotTable(); - $localKey = $firstModel->getLastLocalKey(); $relatedModelInstance = new $relatedModel(); $relatedTable = $relatedModelInstance->getTable(); @@ -1768,7 +1769,7 @@ protected function loadManyToManyCount(Collection $collection, string $relation, // Set the count on each model $countAttribute = $relation . '_count'; foreach ($models as $model) { - $key = $model->{$localKey}; + $key = $model->getKey(); $model->{$countAttribute} = $counts[$key] ?? 0; } }