Database: Migrations. Renaming Tables With Foreign Keys

Modifying Columns


Before changing a line, make sure to include the doctrine/dbal dependency to your composer.json file. The Doctrine DBAL collection is employed to look for the state that is current of line and produce the SQL queries needed seriously to result in the needed alterations:

Upgrading Column Characteristics

The alteration technique enables you to change type and attributes of existing columns. For instance, you may want to raise the size of a sequence line. To understand modification technique for action, why don’t we boost the size associated with title line from 25 to 50:

We’re able to additionally change a line become nullable:

Renaming Columns

To rename a line, you may make use of the renameColumn technique regarding the schema builder. Before renaming a line, make sure to include the doctrine/dbal dependency to your composer.json file:

Renaming an enum column just isn’t presently supported.

Dropping Columns

To drop a line, utilize the dropColumn technique regarding the schema builder. Before dropping columns from A sqlite database, you need to include the doctrine/dbal dependency to your composer.json file and run the composer upgrade demand in your terminal to set up the collection:

You could drop columns that are multiple a dining table by moving a myriad of line names to your dropColumn technique:

Dropping or changing multiple columns in just a solitary migration while utilizing a SQLite database is certainly not supported.

Available Command Aliases


Producing Indexes

The Laravel schema builder supports several kinds of indexes. The after instance produces a brand brand brand brand new e-mail line and specifies that its values must be unique. To generate the index, we are able to chain the method that is unique the line meaning:

Instead, you might produce the index after defining the line. For instance:

You may also pass a myriad of columns to an index way to produce a ingredient (or composite) index:

Laravel will immediately produce an index title on the basis of the dining table, line names, plus the index kind, however you may pass a 2nd argument to the strategy to specify the index title yourself:

Available Index Kinds

Each index technique takes an optional argument that is second specify the title regarding the index. If omitted, the true title is supposed to be produced by the names of this dining dining table and column(s) utilized for the index, plus the index kind.

Index Lengths & MySQL / MariaDB

Laravel uses the utf8mb4 character set by standard, including help for storing “emojis” in the database. If you’re operating a type of MySQL more than the 5.7.7 launch or MariaDB over the age of the 10.2.2 launch, you may have to manually configure the standard sequence size produced by migrations to ensure that MySQL to generate indexes for them. You might configure this by calling the Schema technique inside your AppServiceProvider :

Instead, you might allow the innodb_large_prefix selection for your database. Make reference to your database’s documents for directions about how to correctly allow this program.

Renaming Indexes

To rename an index, you may make use of the renameIndex technique. This process takes the index that is current as the very very very very first argument in addition to desired brand brand new title as the 2nd argument:

Dropping Indexes

To drop an index, you need to specify the index’s title. By standard, Laravel immediately assigns an index title on the basis of the dining table title, the title of this indexed column, additionally the index kind. Below are a few examples:

The conventional index name will be generated based on the table name, columns and key type if you pass an array of columns into a method that drops indexes

Foreign Key Constraints

Laravel additionally provides help for creating key that is foreign, that are utilized to make referential integrity in the database level. For instance, why don’t we determine a user_id column in the articles dining table that recommendations the id column for a users dining table:

Because this syntax is quite verbose, Laravel provides additional, terser techniques that utilize meeting to deliver a far better designer experience. The example above could possibly be written like therefore:

The method that is foreignId an alias for unsignedBigInteger even though the constrained technique uses meeting to look for the table and column title being referenced. If the dining dining table title will not match the meeting, you could specify the dining dining table title by moving it as a quarrel to your method that is constrained

It’s also possible to specify the specified action for the “on delete” and “on revision” properties for the constraint:

Any extra line modifiers should be called before constrained :

To drop a foreign key, you might use the dropForeign technique, passing the international key constraint become deleted as a quarrel. Foreign key constraints utilize the exact same naming meeting as indexes, on the basis of the dining dining table title additionally the columns into the constraint, accompanied by a “_foreign” suffix:

Instead, you may possibly pass a wide range containing the line title that holds the international key towards the method that is dropForeign. The array will be immediately transformed utilizing the constraint title meeting utilized by Laravel’s schema builder:

You could enable or disable international key constraints inside your migrations utilizing the following practices:

SQLite disables key that is foreign by standard. When working with SQLite, remember to enable international support that is key your database setup before trying to generate them in your migrations. In addition, SQLite just supports international tips upon creation associated with dining dining table rather than whenever tables are modified.