diff --git a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php index 387ccc7ab33..7822de3c2ad 100755 --- a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php +++ b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php @@ -96,9 +96,9 @@ public function addConstraints() // For belongs to relationships, which are essentially the inverse of has one // or has many relationships, we need to actually query on the primary key // of the related models matching on the foreign key that's on a parent. - $table = $this->related->getTable(); + $key = $this->getQualifiedOwnerKeyName(); - $this->query->where($table.'.'.$this->ownerKey, '=', $this->getForeignKeyFrom($this->child)); + $this->query->where($key, '=', $this->getForeignKeyFrom($this->child)); } } @@ -108,7 +108,7 @@ public function addEagerConstraints(array $models) // We'll grab the primary key name of the related models since it could be set to // a non-standard name and not "id". We will then construct the constraint for // our eagerly loading query so it returns the proper models from execution. - $key = $this->related->getTable().'.'.$this->ownerKey; + $key = $this->getQualifiedOwnerKeyName(); $whereIn = $this->whereInMethod($this->related, $this->ownerKey); diff --git a/tests/Database/DatabaseEloquentBelongsToTest.php b/tests/Database/DatabaseEloquentBelongsToTest.php index 1ace437a434..750a1f0237f 100755 --- a/tests/Database/DatabaseEloquentBelongsToTest.php +++ b/tests/Database/DatabaseEloquentBelongsToTest.php @@ -404,6 +404,7 @@ protected function getRelation($parent = null, $keyType = 'int') $this->related->shouldReceive('getKeyType')->andReturn($keyType); $this->related->shouldReceive('getKeyName')->andReturn('id'); $this->related->shouldReceive('getTable')->andReturn('relation'); + $this->related->shouldReceive('qualifyColumn')->andReturnUsing(fn (string $column) => "relation.{$column}"); $this->builder->shouldReceive('getModel')->andReturn($this->related); $parent = $parent ?: new EloquentBelongsToModelStub; diff --git a/tests/Database/DatabaseEloquentMorphToTest.php b/tests/Database/DatabaseEloquentMorphToTest.php index 0366126f450..d85b4bf15b0 100644 --- a/tests/Database/DatabaseEloquentMorphToTest.php +++ b/tests/Database/DatabaseEloquentMorphToTest.php @@ -368,6 +368,7 @@ protected function getRelationAssociate($parent) $related = m::mock(Model::class); $related->shouldReceive('getKey')->andReturn(1); $related->shouldReceive('getTable')->andReturn('relation'); + $related->shouldReceive('qualifyColumn')->andReturnUsing(fn (string $column) => "relation.{$column}"); $builder->shouldReceive('getModel')->andReturn($related); return new MorphTo($builder, $parent, 'foreign_key', 'id', 'morph_type', 'relation'); @@ -378,8 +379,9 @@ public function getRelation($parent = null, $builder = null) $this->builder = $builder ?: m::mock(Builder::class); $this->builder->shouldReceive('where')->with('relation.id', '=', 'foreign.value'); $this->related = m::mock(Model::class); - $this->related->shouldReceive('getKeyName')->andReturn('id'); + $this->related->shouldReceive('getcolumn')->andReturn('id'); $this->related->shouldReceive('getTable')->andReturn('relation'); + $this->related->shouldReceive('qualifyColumn')->andReturnUsing(fn (string $column) => "relation.{$column}"); $this->builder->shouldReceive('getModel')->andReturn($this->related); $parent = $parent ?: new EloquentMorphToModelStub;