diff --git a/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php b/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php index 065e1b4fbcd7..0cfcf6517bb9 100644 --- a/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php +++ b/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php @@ -383,8 +383,10 @@ public function withAggregate($relations, $column, $function = null) $relation = $this->getRelationWithoutConstraints($name); if ($function) { + $predictedColumn = $this->getQuery()->from === $relation->getQuery()->getQuery()->from ? "{$relation->getRelationCountHash(true)}.$column" : $column; + $expression = sprintf('%s(%s)', $function, $this->getQuery()->getGrammar()->wrap( - $column === '*' ? $column : $relation->getRelated()->qualifyColumn($column) + $column === '*' ? $column : $relation->getRelated()->qualifyColumn($predictedColumn) )); } else { $expression = $column; diff --git a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php index 664f2b8e8049..e438d8854490 100755 --- a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php +++ b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php @@ -282,11 +282,12 @@ public function getRelationExistenceQueryForSelfRelation(Builder $query, Builder /** * Get a relationship join table hash. * + * @param bool $lockCount * @return string */ - public function getRelationCountHash() + public function getRelationCountHash($lockCount = false) { - return 'laravel_reserved_'.static::$selfJoinCount++; + return 'laravel_reserved_'.($lockCount ? static::$selfJoinCount : static::$selfJoinCount++); } /** diff --git a/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php b/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php index b54340ec2559..ae82ac02ddce 100755 --- a/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php +++ b/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php @@ -1170,11 +1170,12 @@ public function getExistenceCompareKey() /** * Get a relationship join table hash. * + * @param bool $lockCount * @return string */ - public function getRelationCountHash() + public function getRelationCountHash($lockCount = false) { - return 'laravel_reserved_'.static::$selfJoinCount++; + return 'laravel_reserved_'.($lockCount ? static::$selfJoinCount : static::$selfJoinCount++); } /** diff --git a/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php b/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php index b0b568b25f01..7d5008d782c2 100644 --- a/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php +++ b/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php @@ -599,11 +599,12 @@ public function getRelationExistenceQueryForThroughSelfRelation(Builder $query, /** * Get a relationship join table hash. * + * @param bool $lockCount * @return string */ - public function getRelationCountHash() + public function getRelationCountHash($lockCount = false) { - return 'laravel_reserved_'.static::$selfJoinCount++; + return 'laravel_reserved_'.($lockCount ? static::$selfJoinCount : static::$selfJoinCount++); } /** diff --git a/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php b/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php index acff8314640e..18dc09094886 100755 --- a/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php +++ b/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php @@ -366,11 +366,12 @@ public function getRelationExistenceQueryForSelfRelation(Builder $query, Builder /** * Get a relationship join table hash. * + * @param bool $lockCount * @return string */ - public function getRelationCountHash() + public function getRelationCountHash($lockCount = false) { - return 'laravel_reserved_'.static::$selfJoinCount++; + return 'laravel_reserved_'.($lockCount ? static::$selfJoinCount : static::$selfJoinCount++); } /**