From 74964bd7044ba664d380863ab15e9255992bf146 Mon Sep 17 00:00:00 2001 From: Matheus Valim Oliveira Date: Mon, 7 Jun 2021 19:01:26 -0300 Subject: [PATCH 1/2] add missing fix to DatabaseRule::resolveTableName --- src/Illuminate/Validation/Rules/DatabaseRule.php | 4 ++++ tests/Validation/ValidationExistsRuleTest.php | 10 ++++++++++ tests/Validation/ValidationUniqueRuleTest.php | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/Illuminate/Validation/Rules/DatabaseRule.php b/src/Illuminate/Validation/Rules/DatabaseRule.php index b8113b2afadb..2073ed39240a 100644 --- a/src/Illuminate/Validation/Rules/DatabaseRule.php +++ b/src/Illuminate/Validation/Rules/DatabaseRule.php @@ -65,6 +65,10 @@ public function resolveTableName($table) if (is_subclass_of($table, Model::class)) { $model = new $table; + if(Str::contains($model->getTable(), '.')) { + return $table; + } + return implode('.', array_map(function (string $part) { return trim($part, '.'); }, array_filter([$model->getConnectionName(), $model->getTable()]))); diff --git a/tests/Validation/ValidationExistsRuleTest.php b/tests/Validation/ValidationExistsRuleTest.php index 77918ce3992a..4bca3d8e306c 100644 --- a/tests/Validation/ValidationExistsRuleTest.php +++ b/tests/Validation/ValidationExistsRuleTest.php @@ -43,6 +43,10 @@ public function testItCorrectlyFormatsAStringVersionOfTheRule() $rule->where('foo', 'bar'); $this->assertSame('exists:users,NULL,foo,"bar"', (string) $rule); + $rule = new Exists(UserWithPrefixedTable::class); + $rule->where('foo', 'bar'); + $this->assertSame('exists:'.UserWithPrefixedTable::class.',NULL,foo,"bar"', (string) $rule); + $rule = new Exists('table', 'column'); $rule->where('foo', 'bar'); $this->assertSame('exists:table,column,foo,"bar"', (string) $rule); @@ -234,6 +238,12 @@ class User extends Eloquent protected $guarded = []; public $timestamps = false; } +class UserWithPrefixedTable extends Eloquent +{ + protected $table = 'public.users'; + protected $guarded = []; + public $timestamps = false; +} class UserWithConnection extends User { diff --git a/tests/Validation/ValidationUniqueRuleTest.php b/tests/Validation/ValidationUniqueRuleTest.php index c1545887db02..2aa821c1f69a 100644 --- a/tests/Validation/ValidationUniqueRuleTest.php +++ b/tests/Validation/ValidationUniqueRuleTest.php @@ -35,6 +35,9 @@ public function testItCorrectlyFormatsAStringVersionOfTheRule() $rule->where('foo', 'bar'); $this->assertSame('unique:table,column,"Taylor, Otwell",id_column,foo,"bar"', (string) $rule); + $rule = new Unique(PrefixedTableEloquentModelStub::class); + $this->assertSame('unique:'.PrefixedTableEloquentModelStub::class.',NULL,NULL,id', (string) $rule); + $rule = new Unique(EloquentModelStub::class, 'column'); $rule->ignore('Taylor, Otwell', 'id_column'); $rule->where('foo', 'bar'); @@ -87,6 +90,13 @@ class EloquentModelStub extends Model protected $guarded = []; } +class PrefixedTableEloquentModelStub extends Model +{ + protected $table = 'public.table'; + protected $primaryKey = 'id_column'; + protected $guarded = []; +} + class NoTableName extends Model { protected $guarded = []; From adff4c1a4db649fd368dba2471368ae155b864eb Mon Sep 17 00:00:00 2001 From: Matheus Valim Oliveira Date: Mon, 7 Jun 2021 19:20:51 -0300 Subject: [PATCH 2/2] style CI fixes --- src/Illuminate/Validation/Rules/DatabaseRule.php | 2 +- tests/Validation/ValidationExistsRuleTest.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Validation/Rules/DatabaseRule.php b/src/Illuminate/Validation/Rules/DatabaseRule.php index 2073ed39240a..7789008483fa 100644 --- a/src/Illuminate/Validation/Rules/DatabaseRule.php +++ b/src/Illuminate/Validation/Rules/DatabaseRule.php @@ -65,7 +65,7 @@ public function resolveTableName($table) if (is_subclass_of($table, Model::class)) { $model = new $table; - if(Str::contains($model->getTable(), '.')) { + if (Str::contains($model->getTable(), '.')) { return $table; } diff --git a/tests/Validation/ValidationExistsRuleTest.php b/tests/Validation/ValidationExistsRuleTest.php index 4bca3d8e306c..ee85dd322c28 100644 --- a/tests/Validation/ValidationExistsRuleTest.php +++ b/tests/Validation/ValidationExistsRuleTest.php @@ -238,6 +238,7 @@ class User extends Eloquent protected $guarded = []; public $timestamps = false; } + class UserWithPrefixedTable extends Eloquent { protected $table = 'public.users';