Skip to content

Commit 1ffff8b

Browse files
committed
fix(database): fully qualify morph columns when using WHERE clauses
1 parent 9d7c869 commit 1ffff8b

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ public function whereMorphedTo($relation, $model, $boolean = 'and')
466466
}
467467

468468
if (is_null($model)) {
469-
return $this->whereNull($relation->getMorphType(), $boolean);
469+
return $this->whereNull($relation->getModel()->qualifyColumn($relation->getMorphType()), $boolean);
470470
}
471471

472472
if (is_string($model)) {
@@ -476,12 +476,12 @@ public function whereMorphedTo($relation, $model, $boolean = 'and')
476476
$model = array_search($model, $morphMap, true);
477477
}
478478

479-
return $this->where($relation->getMorphType(), $model, null, $boolean);
479+
return $this->where($relation->getModel()->qualifyColumn($relation->getMorphType()), $model, null, $boolean);
480480
}
481481

482482
return $this->where(function ($query) use ($relation, $model) {
483-
$query->where($relation->getMorphType(), $model->getMorphClass())
484-
->where($relation->getForeignKeyName(), $model->getKey());
483+
$query->where($relation->getModel()->qualifyColumn($relation->getMorphType()), $model->getMorphClass())
484+
->where($relation->getModel()->qualifyColumn($relation->getForeignKeyName()), $model->getKey());
485485
}, null, null, $boolean);
486486
}
487487

@@ -505,12 +505,12 @@ public function whereNotMorphedTo($relation, $model, $boolean = 'and')
505505
$model = array_search($model, $morphMap, true);
506506
}
507507

508-
return $this->whereNot($relation->getMorphType(), '<=>', $model, $boolean);
508+
return $this->whereNot($relation->getModel()->qualifyColumn($relation->getMorphType()), '<=>', $model, $boolean);
509509
}
510510

511511
return $this->whereNot(function ($query) use ($relation, $model) {
512-
$query->where($relation->getMorphType(), '<=>', $model->getMorphClass())
513-
->where($relation->getForeignKeyName(), '<=>', $model->getKey());
512+
$query->where($relation->getModel()->qualifyColumn($relation->getMorphType()), '<=>', $model->getMorphClass())
513+
->where($relation->getModel()->qualifyColumn($relation->getForeignKeyName()), '<=>', $model->getKey());
514514
}, null, null, $boolean);
515515
}
516516

tests/Database/DatabaseEloquentBuilderTest.php

+11-11
Original file line numberDiff line numberDiff line change
@@ -1774,7 +1774,7 @@ public function testWhereMorphedTo()
17741774

17751775
$builder = $model->whereMorphedTo('morph', $relatedModel);
17761776

1777-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where ("morph_type" = ? and "morph_id" = ?)', $builder->toSql());
1777+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where ("eloquent_builder_test_model_parent_stubs"."morph_type" = ? and "eloquent_builder_test_model_parent_stubs"."morph_id" = ?)', $builder->toSql());
17781778
$this->assertEquals([$relatedModel->getMorphClass(), $relatedModel->getKey()], $builder->getBindings());
17791779
}
17801780

@@ -1784,7 +1784,7 @@ public function testWhereMorphedToNull()
17841784
$this->mockConnectionForModel($model, '');
17851785

17861786
$builder = $model->whereMorphedTo('morph', null);
1787-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "morph_type" is null', $builder->toSql());
1787+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "eloquent_builder_test_model_parent_stubs"."morph_type" is null', $builder->toSql());
17881788
}
17891789

17901790
public function testWhereNotMorphedTo()
@@ -1797,7 +1797,7 @@ public function testWhereNotMorphedTo()
17971797

17981798
$builder = $model->whereNotMorphedTo('morph', $relatedModel);
17991799

1800-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where not ("morph_type" <=> ? and "morph_id" <=> ?)', $builder->toSql());
1800+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where not ("eloquent_builder_test_model_parent_stubs"."morph_type" <=> ? and "eloquent_builder_test_model_parent_stubs"."morph_id" <=> ?)', $builder->toSql());
18011801
$this->assertEquals([$relatedModel->getMorphClass(), $relatedModel->getKey()], $builder->getBindings());
18021802
}
18031803

@@ -1811,7 +1811,7 @@ public function testOrWhereMorphedTo()
18111811

18121812
$builder = $model->where('bar', 'baz')->orWhereMorphedTo('morph', $relatedModel);
18131813

1814-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or ("morph_type" = ? and "morph_id" = ?)', $builder->toSql());
1814+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or ("eloquent_builder_test_model_parent_stubs"."morph_type" = ? and "eloquent_builder_test_model_parent_stubs"."morph_id" = ?)', $builder->toSql());
18151815
$this->assertEquals(['baz', $relatedModel->getMorphClass(), $relatedModel->getKey()], $builder->getBindings());
18161816
}
18171817

@@ -1822,7 +1822,7 @@ public function testOrWhereMorphedToNull()
18221822

18231823
$builder = $model->where('bar', 'baz')->orWhereMorphedTo('morph', null);
18241824

1825-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or "morph_type" is null', $builder->toSql());
1825+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or "eloquent_builder_test_model_parent_stubs"."morph_type" is null', $builder->toSql());
18261826
$this->assertEquals(['baz'], $builder->getBindings());
18271827
}
18281828

@@ -1836,7 +1836,7 @@ public function testOrWhereNotMorphedTo()
18361836

18371837
$builder = $model->where('bar', 'baz')->orWhereNotMorphedTo('morph', $relatedModel);
18381838

1839-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or not ("morph_type" <=> ? and "morph_id" <=> ?)', $builder->toSql());
1839+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or not ("eloquent_builder_test_model_parent_stubs"."morph_type" <=> ? and "eloquent_builder_test_model_parent_stubs"."morph_id" <=> ?)', $builder->toSql());
18401840
$this->assertEquals(['baz', $relatedModel->getMorphClass(), $relatedModel->getKey()], $builder->getBindings());
18411841
}
18421842

@@ -1847,7 +1847,7 @@ public function testWhereMorphedToClass()
18471847

18481848
$builder = $model->whereMorphedTo('morph', EloquentBuilderTestModelCloseRelatedStub::class);
18491849

1850-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "morph_type" = ?', $builder->toSql());
1850+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "eloquent_builder_test_model_parent_stubs"."morph_type" = ?', $builder->toSql());
18511851
$this->assertEquals([EloquentBuilderTestModelCloseRelatedStub::class], $builder->getBindings());
18521852
}
18531853

@@ -1858,7 +1858,7 @@ public function testWhereNotMorphedToClass()
18581858

18591859
$builder = $model->whereNotMorphedTo('morph', EloquentBuilderTestModelCloseRelatedStub::class);
18601860

1861-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where not "morph_type" <=> ?', $builder->toSql());
1861+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where not "eloquent_builder_test_model_parent_stubs"."morph_type" <=> ?', $builder->toSql());
18621862
$this->assertEquals([EloquentBuilderTestModelCloseRelatedStub::class], $builder->getBindings());
18631863
}
18641864

@@ -1869,7 +1869,7 @@ public function testOrWhereMorphedToClass()
18691869

18701870
$builder = $model->where('bar', 'baz')->orWhereMorphedTo('morph', EloquentBuilderTestModelCloseRelatedStub::class);
18711871

1872-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or "morph_type" = ?', $builder->toSql());
1872+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or "eloquent_builder_test_model_parent_stubs"."morph_type" = ?', $builder->toSql());
18731873
$this->assertEquals(['baz', EloquentBuilderTestModelCloseRelatedStub::class], $builder->getBindings());
18741874
}
18751875

@@ -1880,7 +1880,7 @@ public function testOrWhereNotMorphedToClass()
18801880

18811881
$builder = $model->where('bar', 'baz')->orWhereNotMorphedTo('morph', EloquentBuilderTestModelCloseRelatedStub::class);
18821882

1883-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or not "morph_type" <=> ?', $builder->toSql());
1883+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or not "eloquent_builder_test_model_parent_stubs"."morph_type" <=> ?', $builder->toSql());
18841884
$this->assertEquals(['baz', EloquentBuilderTestModelCloseRelatedStub::class], $builder->getBindings());
18851885
}
18861886

@@ -1895,7 +1895,7 @@ public function testWhereMorphedToAlias()
18951895

18961896
$builder = $model->whereMorphedTo('morph', EloquentBuilderTestModelCloseRelatedStub::class);
18971897

1898-
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "morph_type" = ?', $builder->toSql());
1898+
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "eloquent_builder_test_model_parent_stubs"."morph_type" = ?', $builder->toSql());
18991899
$this->assertEquals(['alias'], $builder->getBindings());
19001900

19011901
Relation::morphMap([], false);

0 commit comments

Comments
 (0)