Skip to content

Commit 7109e0a

Browse files
authored
fix auto creating model by class name (#33481)
1 parent 15ec476 commit 7109e0a

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

src/Illuminate/Validation/Rules/DatabaseRule.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ public function resolveTableName($table)
6262
return $table;
6363
}
6464

65-
$model = new $table;
65+
if (is_subclass_of($table, Model::class)) {
66+
return (new $table)->getTable();
67+
}
6668

67-
return $model instanceof Model
68-
? $model->getTable()
69-
: $table;
69+
return $table;
7070
}
7171

7272
/**

tests/Validation/ValidationExistsRuleTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ public function testItCorrectlyFormatsAStringVersionOfTheRule()
5858
$rule = new Exists(NoTableNameModel::class, 'column');
5959
$rule->where('foo', 'bar');
6060
$this->assertSame('exists:no_table_name_models,column,foo,"bar"', (string) $rule);
61+
62+
$rule = new Exists(ClassWithRequiredConstructorParameters::class, 'column');
63+
$rule->where('foo', 'bar');
64+
$this->assertSame('exists:'.ClassWithRequiredConstructorParameters::class.',column,foo,"bar"', (string) $rule);
6165
}
6266

6367
public function testItChoosesValidRecordsUsingWhereInRule()
@@ -203,3 +207,15 @@ class NoTableNameModel extends Eloquent
203207
protected $guarded = [];
204208
public $timestamps = false;
205209
}
210+
211+
class ClassWithRequiredConstructorParameters
212+
{
213+
private $bar;
214+
private $baz;
215+
216+
public function __construct($bar, $baz)
217+
{
218+
$this->bar = $bar;
219+
$this->baz = $baz;
220+
}
221+
}

tests/Validation/ValidationUniqueRuleTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ public function testItCorrectlyFormatsAStringVersionOfTheRule()
2626
$rule->where('foo', 'bar');
2727
$this->assertSame('unique:no_table_names,NULL,NULL,id,foo,"bar"', (string) $rule);
2828

29+
$rule = new Unique(ClassWithNonEmptyConstructor::class);
30+
$rule->where('foo', 'bar');
31+
$this->assertSame('unique:'.ClassWithNonEmptyConstructor::class.',NULL,NULL,id,foo,"bar"', (string) $rule);
32+
2933
$rule = new Unique('table', 'column');
3034
$rule->ignore('Taylor, Otwell', 'id_column');
3135
$rule->where('foo', 'bar');
@@ -78,3 +82,15 @@ class NoTableName extends Model
7882
protected $guarded = [];
7983
public $timestamps = false;
8084
}
85+
86+
class ClassWithNonEmptyConstructor
87+
{
88+
private $bar;
89+
private $baz;
90+
91+
public function __construct($bar, $baz)
92+
{
93+
$this->bar = $bar;
94+
$this->baz = $baz;
95+
}
96+
}

0 commit comments

Comments
 (0)