Skip to content

Commit c01443d

Browse files
[10.x] Get value attribute when default value is an enum (#48452)
* feat: get value attribute when default value is an enum * Update Grammar.php --------- Co-authored-by: Taylor Otwell <taylor@laravel.com>
1 parent 9ac653d commit c01443d

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/Illuminate/Database/Schema/Grammars/Grammar.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Illuminate\Database\Schema\Grammars;
44

5+
use BackedEnum;
56
use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager;
67
use Doctrine\DBAL\Schema\TableDiff;
78
use Illuminate\Contracts\Database\Query\Expression;
@@ -309,6 +310,10 @@ protected function getDefaultValue($value)
309310
return $this->getValue($value);
310311
}
311312

313+
if ($value instanceof BackedEnum) {
314+
return "'{$value->value}'";
315+
}
316+
312317
return is_bool($value)
313318
? "'".(int) $value."'"
314319
: "'".(string) $value."'";

tests/Database/DatabaseMySqlSchemaGrammarTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Illuminate\Database\Schema\Blueprint;
88
use Illuminate\Database\Schema\ForeignIdColumnDefinition;
99
use Illuminate\Database\Schema\Grammars\MySqlGrammar;
10+
use Illuminate\Tests\Database\Fixtures\Enums\Foo;
1011
use Mockery as m;
1112
use PHPUnit\Framework\TestCase;
1213

@@ -623,6 +624,13 @@ public function testAddingString()
623624

624625
$this->assertCount(1, $statements);
625626
$this->assertSame('alter table `users` add `foo` varchar(100) null default CURRENT TIMESTAMP', $statements[0]);
627+
628+
$blueprint = new Blueprint('users');
629+
$blueprint->string('foo', 100)->nullable()->default(Foo::BAR);
630+
$statements = $blueprint->toSql($this->getConnection(), $this->getGrammar());
631+
632+
$this->assertCount(1, $statements);
633+
$this->assertSame('alter table `users` add `foo` varchar(100) null default \'bar\'', $statements[0]);
626634
}
627635

628636
public function testAddingText()

tests/Database/Fixtures/Enums/Foo.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Illuminate\Tests\Database\Fixtures\Enums;
4+
5+
enum Foo: string
6+
{
7+
case BAR = 'bar';
8+
}

0 commit comments

Comments
 (0)