From 3c2d0636d5d426d0c0b210ee14ce7f52bde23ad2 Mon Sep 17 00:00:00 2001 From: Luke Kuzmish Date: Tue, 11 Apr 2023 13:04:54 -0400 Subject: [PATCH 1/3] allow specifying constrained index --- .../Database/Schema/ForeignIdColumnDefinition.php | 13 ++++++++----- tests/Database/DatabaseMySqlSchemaGrammarTest.php | 11 +++++++++++ .../Database/DatabasePostgresSchemaGrammarTest.php | 11 +++++++++++ tests/Database/DatabaseSQLiteSchemaGrammarTest.php | 9 +++++++++ .../Database/DatabaseSqlServerSchemaGrammarTest.php | 11 +++++++++++ 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php b/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php index 354b248d2973..fbfb523c3e14 100644 --- a/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php +++ b/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php @@ -31,22 +31,25 @@ public function __construct(Blueprint $blueprint, $attributes = []) * Create a foreign key constraint on this column referencing the "id" column of the conventionally related table. * * @param string|null $table - * @param string $column + * @param string|null $column + * @param string|null $indexName * @return \Illuminate\Database\Schema\ForeignKeyDefinition */ - public function constrained($table = null, $column = 'id') + public function constrained($table = null, $column = null, $indexName = null) { - return $this->references($column)->on($table ?? Str::of($this->name)->beforeLast('_'.$column)->plural()); + $column ??= 'id'; + return $this->references($column, $indexName)->on($table ?? Str::of($this->name)->beforeLast('_'.$column)->plural()); } /** * Specify which column this foreign ID references on another table. * * @param string $column + * @param string $indexName * @return \Illuminate\Database\Schema\ForeignKeyDefinition */ - public function references($column) + public function references($column, $indexName = null) { - return $this->blueprint->foreign($this->name)->references($column); + return $this->blueprint->foreign($this->name, $indexName)->references($column); } } diff --git a/tests/Database/DatabaseMySqlSchemaGrammarTest.php b/tests/Database/DatabaseMySqlSchemaGrammarTest.php index d5a8bbf920cb..3b88b7a6ccc5 100755 --- a/tests/Database/DatabaseMySqlSchemaGrammarTest.php +++ b/tests/Database/DatabaseMySqlSchemaGrammarTest.php @@ -497,6 +497,17 @@ public function testAddingForeignID() ], $statements); } + public function testAddingForeignIdSpecifyingIndexNameInConstraint() + { + $blueprint = new Blueprint('users'); + $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + $this->assertSame([ + 'alter table `users` add `company_id` bigint unsigned not null', + 'alter table `users` add constraint `my_index` foreign key (`company_id`) references `companies` (`id`)', + ], $statements); + } + public function testAddingBigIncrementingID() { $blueprint = new Blueprint('users'); diff --git a/tests/Database/DatabasePostgresSchemaGrammarTest.php b/tests/Database/DatabasePostgresSchemaGrammarTest.php index 8d0a942ef9eb..2e8b67888c1a 100755 --- a/tests/Database/DatabasePostgresSchemaGrammarTest.php +++ b/tests/Database/DatabasePostgresSchemaGrammarTest.php @@ -416,6 +416,17 @@ public function testAddingForeignID() ], $statements); } + public function testAddingForeignIdSpecifyingIndexNameInConstraint() + { + $blueprint = new Blueprint('users'); + $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + $this->assertSame([ + 'alter table "users" add column "company_id" bigint not null', + 'alter table "users" add constraint "my_index" foreign key ("company_id") references "companies" ("id")', + ], $statements); + } + public function testAddingBigIncrementingID() { $blueprint = new Blueprint('users'); diff --git a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php index 1dfd63c54fa7..281d528e1380 100755 --- a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php +++ b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php @@ -321,6 +321,15 @@ public function testAddingForeignID() ], $statements); } + public function testAddingForeignIdSpecifyingIndexNameInConstraint() + { + $blueprint = new Blueprint('users'); + $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + $this->assertSame([ + 'alter table "users" add column "company_id" integer not null' + ], $statements); + } public function testAddingBigIncrementingID() { $blueprint = new Blueprint('users'); diff --git a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php index 40c0ff6ba61a..04ea7814e972 100755 --- a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php +++ b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php @@ -366,6 +366,17 @@ public function testAddingForeignID() ], $statements); } + public function testAddingForeignIdSpecifyingIndexNameInConstraint() + { + $blueprint = new Blueprint('users'); + $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + $this->assertSame([ + 'alter table "users" add "company_id" bigint not null', + 'alter table "users" add constraint "my_index" foreign key ("company_id") references "companies" ("id")', + ], $statements); + } + public function testAddingBigIncrementingID() { $blueprint = new Blueprint('users'); From d71c122fd2194752a57f221b25701e7ddb3cbc5c Mon Sep 17 00:00:00 2001 From: Luke Kuzmish Date: Tue, 11 Apr 2023 13:33:50 -0400 Subject: [PATCH 2/3] style --- src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php | 1 + tests/Database/DatabaseSQLiteSchemaGrammarTest.php | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php b/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php index fbfb523c3e14..e199c98dcc96 100644 --- a/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php +++ b/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php @@ -38,6 +38,7 @@ public function __construct(Blueprint $blueprint, $attributes = []) public function constrained($table = null, $column = null, $indexName = null) { $column ??= 'id'; + return $this->references($column, $indexName)->on($table ?? Str::of($this->name)->beforeLast('_'.$column)->plural()); } diff --git a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php index 281d528e1380..9cb15c71decc 100755 --- a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php +++ b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php @@ -327,9 +327,10 @@ public function testAddingForeignIdSpecifyingIndexNameInConstraint() $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertSame([ - 'alter table "users" add column "company_id" integer not null' + 'alter table "users" add column "company_id" integer not null', ], $statements); } + public function testAddingBigIncrementingID() { $blueprint = new Blueprint('users'); From 3176f3409a1e8cb84a7f1a4f98a6b94514ba0696 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Tue, 11 Apr 2023 14:15:27 -0500 Subject: [PATCH 3/3] formatting --- src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php | 4 +--- tests/Database/DatabaseMySqlSchemaGrammarTest.php | 2 +- tests/Database/DatabasePostgresSchemaGrammarTest.php | 2 +- tests/Database/DatabaseSQLiteSchemaGrammarTest.php | 2 +- tests/Database/DatabaseSqlServerSchemaGrammarTest.php | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php b/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php index e199c98dcc96..b0f76cada55f 100644 --- a/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php +++ b/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php @@ -35,10 +35,8 @@ public function __construct(Blueprint $blueprint, $attributes = []) * @param string|null $indexName * @return \Illuminate\Database\Schema\ForeignKeyDefinition */ - public function constrained($table = null, $column = null, $indexName = null) + public function constrained($table = null, $column = 'id', $indexName = null) { - $column ??= 'id'; - return $this->references($column, $indexName)->on($table ?? Str::of($this->name)->beforeLast('_'.$column)->plural()); } diff --git a/tests/Database/DatabaseMySqlSchemaGrammarTest.php b/tests/Database/DatabaseMySqlSchemaGrammarTest.php index 3b88b7a6ccc5..58b1c3168a73 100755 --- a/tests/Database/DatabaseMySqlSchemaGrammarTest.php +++ b/tests/Database/DatabaseMySqlSchemaGrammarTest.php @@ -500,7 +500,7 @@ public function testAddingForeignID() public function testAddingForeignIdSpecifyingIndexNameInConstraint() { $blueprint = new Blueprint('users'); - $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $blueprint->foreignId('company_id')->constrained(indexName: 'my_index'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertSame([ 'alter table `users` add `company_id` bigint unsigned not null', diff --git a/tests/Database/DatabasePostgresSchemaGrammarTest.php b/tests/Database/DatabasePostgresSchemaGrammarTest.php index 2e8b67888c1a..8ff15e2e14a7 100755 --- a/tests/Database/DatabasePostgresSchemaGrammarTest.php +++ b/tests/Database/DatabasePostgresSchemaGrammarTest.php @@ -419,7 +419,7 @@ public function testAddingForeignID() public function testAddingForeignIdSpecifyingIndexNameInConstraint() { $blueprint = new Blueprint('users'); - $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $blueprint->foreignId('company_id')->constrained(indexName: 'my_index'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertSame([ 'alter table "users" add column "company_id" bigint not null', diff --git a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php index 9cb15c71decc..1a80835d8abe 100755 --- a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php +++ b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php @@ -324,7 +324,7 @@ public function testAddingForeignID() public function testAddingForeignIdSpecifyingIndexNameInConstraint() { $blueprint = new Blueprint('users'); - $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $blueprint->foreignId('company_id')->constrained(indexName: 'my_index'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertSame([ 'alter table "users" add column "company_id" integer not null', diff --git a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php index 04ea7814e972..cc110d1edaad 100755 --- a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php +++ b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php @@ -369,7 +369,7 @@ public function testAddingForeignID() public function testAddingForeignIdSpecifyingIndexNameInConstraint() { $blueprint = new Blueprint('users'); - $blueprint->foreignId('company_id')->constrained(null, null, 'my_index'); + $blueprint->foreignId('company_id')->constrained(indexName: 'my_index'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertSame([ 'alter table "users" add "company_id" bigint not null',