Sometimes you want to add constraints on a table level, rather than a column level. The following methods will let you accomplish that.
Create a generic index from one or more columns.
Argument | Type | Required | Default | Description |
columns | string or array |
| ​ | The column or array of columns that make up the index. |
name | string |
| A generated name consisting of the table name and column name(s). | The name of the index constraint. |
​ | ​ | ​ | ​ | ​ |
Example:
SchemaBuilder
schema.create( "users", function( table ) {table.string( "first_name" );table.string( "last_name" );table.index( [ "first_name", "last_name" ], "idx_users_full_name" );} );
SQL (MySQL)
CREATE TABLE `users` (`first_name` VARCHAR(255) NOT NULL,`last_name` VARCHAR(255) NOT NULL,INDEX `idx_users_full_name` (`first_name`, `last_name`))
Create a foreign key constraint from one or more columns. Follow up this call with calls to the TableIndex
's references
and onTable
methods.
Argument | Type | Required | Default | Description |
columns | string or array |
| ​ | The column or array of columns that references a key or keys on another table. |
name | string |
| A generated name consisting of the table name and column name(s). | The name of the foreign key constraint. |
Example:
SchemaBuilder
schema.create( "users", function( table ) {table.unsignedInteger( "country_id" );table.foreignKey( "country_id" ).references( "id" ).onTable( "countries" );} );
SQL (MySQL)
CREATE TABLE `users` (`country_id` INTEGER UNSIGNED NOT NULL,CONSTRAINT `fk_users_country_id` FOREIGN KEY (`country_id`) REFERENCES `countries` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION)
Create a primary key constraint from one or more columns.
Argument | Type | Required | Default | Description |
columns | string or array |
| ​ | The column or array of columns that make up the primary key. |
name | string |
| A generated name consisting of the table name and column name(s). | The name of the primary key constraint. |
​ | ​ | ​ | ​ | ​ |
Example:
SchemaBuilder
schema.create( "posts_users", function( table ) {table.unsignedInteger( "post_id" ).references( "id" ).onTable( "posts" );table.unsignedInteger( "user_id" ).references( "id" ).onTable( "users" );table.primaryKey( [ "post_id", "user_id" ], "pk_posts_users" );} );
SQL (MySQL)
CREATE TABLE `posts_users` (`post_id` VARCHAR(255) NOT NULL,`user_id` VARCHAR(255) NOT NULL,INDEX `idx_users_full_name` (`first_name`, `last_name`),CONSTRAINT `fk_posts_users_post_id` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION,CONSTRAINT `fk_posts_users_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION,CONSTRAINT ""pk_users_first_name_last_name"" PRIMARY KEY (""first_name"", ""last_name""))
Create a unique constraint from one or more columns.
Argument | Type | Required | Default | Description |
columns | string or array |
| ​ | The column or array of columns that make up the unique constraint. |
name | string |
| A generated name consisting of the table name and column name(s). | The name of the unique constraint. |
Example:
SchemaBuilder
schema.create( "users", function( table ) {table.increments( "id" );table.string( "username ");table.unique( "username" );} );
SQL (MySQL)
CREATE TABLE `users` (`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,UNIQUE (`username`))