Skip to content

Commit

Permalink
[11.x] Use getQualifiedOwnerKeyName in relations (#53573)
Browse files Browse the repository at this point in the history
* feat: use model to qualify column

* tests: update mock

* refactor: use existing method

* fix: handle null value

* tests: update mocks

* chore: remove duplicates

* chore: revert unnecessary change
  • Loading branch information
willtj authored Nov 19, 2024
1 parent c272db4 commit 8528d04
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/Illuminate/Database/Eloquent/Relations/BelongsTo.php
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}

Expand All @@ -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);

Expand Down Expand Up @@ -344,6 +344,10 @@ public function getOwnerKeyName()
*/
public function getQualifiedOwnerKeyName()
{
if (is_null($this->ownerKey)) {
return '';
}

return $this->related->qualifyColumn($this->ownerKey);
}

Expand Down
1 change: 1 addition & 0 deletions tests/Database/DatabaseEloquentBelongsToTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
2 changes: 2 additions & 0 deletions tests/Database/DatabaseEloquentMorphToTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand All @@ -380,6 +381,7 @@ public function getRelation($parent = null, $builder = null)
$this->related = m::mock(Model::class);
$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 EloquentMorphToModelStub;

Expand Down

0 comments on commit 8528d04

Please sign in to comment.