diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 255b797927e7..397b832834fc 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -819,7 +819,9 @@ public function parseTable($table) [$connection, $table] = Str::contains($table, '.') ? explode('.', $table, 2) : [null, $table]; if (Str::contains($table, '\\') && class_exists($table) && is_a($table, Model::class, true)) { - $table = (new $table)->getTable(); + $model = new $table; + $table = $model->getTable(); + $connection = $connection ?? $model->getConnectionName(); } return [$connection, $table]; diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 1457857560f5..1b1864511e29 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -4323,6 +4323,10 @@ public function testParsingTablesFromModels() $this->assertEquals('connection', $explicit_connection[0]); $this->assertEquals('explicits', $explicit_connection[1]); + $explicit_model_implicit_connection = $v->parseTable(ExplicitTableAndConnectionModel::class); + $this->assertEquals('connection', $explicit_model_implicit_connection[0]); + $this->assertEquals('explicits', $explicit_model_implicit_connection[1]); + $noneloquent_connection = $v->parseTable('connection.'.NonEloquentModel::class); $this->assertEquals('connection', $noneloquent_connection[0]); $this->assertEquals(NonEloquentModel::class, $noneloquent_connection[1]); @@ -5198,6 +5202,14 @@ class ExplicitTableModel extends Model public $timestamps = false; } +class ExplicitTableAndConnectionModel extends Model +{ + protected $table = 'explicits'; + protected $connection = 'connection'; + protected $guarded = []; + public $timestamps = false; +} + class NonEloquentModel { }