Column Modifiers
When creating a column from the
Blueprint
object, a Column
object is returned. This column
gives you access to a few modifier commands to further configure the column.Attach a comment to the column.
Argument | Type | Required | Default | Description |
comment | string | true | | The comment text. |
Example:
SchemaBuilder
schema.create( "users", function( table ) {
table.integer( "age" ).comment( "Do not lie about your age" );
} );
SQL (MySQL)
CREATE TABLE `users` (
`age` INTEGER NOT NULL COMMENT `Do not lie about your age`
)
Sets a default value for the column.
Note: The value is not escaped, allowing you to specify functions like
NOW()
or literals like 1
. To specify a literal string, wrap the value in quotes.Argument | Type | Required | Default | Description |
value | string | true | | The default value. |
Example:
SchemaBuilder
schema.create( "users", function( table ) {
table.boolean( "is_active" ).default( 1 );
table.timestamp( "created_date" ).default( "NOW()" );
tablVIRTUAL NOT NULLe.string( "country" ).default( "'USA'" );
} );
SQL (MySQL)
CREATE TABLE `users` (
`is_active` TINYINT(1) DEFAULT 1,
`created_date` TIMESTAMP DEFAULT NOW(),
`country` VARCHAR(255) DEFAULT 'USA'
)
Sets the column to allow null values.
Argument | Type | Required | Default | Description |
No arguments | | | | |
All columns are created as
NOT NULL
by default. As such, there is no notNull
method.Example:
SchemaBuilder
schema.create( "users", function( table ) {
table.timestamp( "last_logged_in" ).nullable()
} );
SQL (MySQL)
CREATE TABLE `users` (
`last_logged_in` TIMESTAMP
)
Adds the column as a primary key for the table.
Argument | Type | Required | Default | Description |
indexName | string | false | A derived name built from the table name and column name. | The name to use for the primary key constraint. |
Example:
SchemaBuilder
schema.create( "users", function( table ) {
table.uuid( "id" ).primaryKey();
} );
SQL (MySQL)
CREATE TABLE `users` (
`id` CHAR(35) NOT NULL,
CONSTAINT `pk_users_id` PRIMARY KEY (`id`)
)
Creates a foreign key constraint for the column.
Argument | Type | Required | Default | Description |
value | string | true | | The default value. |
IMPORTANT: Additional configuration of the foreign constraint is done by calling methods on the returned
TableIndex
instance.Example:
SchemaBuilder
schema.create( "users", function( table ) {
table.unsignedInteger( "country_id" ).references( "id" ).onTable( "countries" ).onDelete( "cascade" );
} );
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 CASCADE
)
Sets the column as unsigned.
Argument | Type | Required | Default | Description |
No arguments | | | | |
Example:
SchemaBuilder
schema.create( "users", function( table ) {
table.integer( age" ).unsigned();
} );
SQL (MySQL)
CREATE TABLE `users` (
`age` INTEGER UNSIGNED NOT NULL
)
Sets the column to have the UNIQUE constraint.
Argument | Type | Required | Default | Description |
No arguments | | | | |
Example:
SchemaBuilder
schema.create( "email", function( table ) {
table.string( email" ).unique();
} );
SQL (MySQL)
CREATE TABLE `users` (
`email` VARCHAR(255) NOT NULL UNIQUE
)
Sets the column to have the a default value of
CURRENT_TIMESTAMP
.Argument | Type | Required | Default | Description |
No arguments | | | | |
Example:
SchemaBuilder
schema.create( "posts", function( table ) {
table.timestamp( "posted_date" ).withCurrent();
} );
SQL (Postgres)
CREATE TABLE "posts" (
"posted_date" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)
Creates a stored computed column. Computed columns are defined as expressions between other columns and/or constant values. Stored computed columns are saved in the database to avoid computing on every query.
Your database grammar may not differentiate between stored computed columns and virtual computed columns. Research your grammar's implementation for more details.
Argument | Type | Required | Default | Description |
expression | string | true | | The SQL used to define the computed column. |
SchemaBuilder
schema.create( "products", function( table ) {
table.integer( "price" );
table.integer( "tax" ).storedAs( "price * 0.0675" );
} );
MySQL
SQL Server
Postgres
Oracle
CREATE TABLE `products` (
`price` INTEGER NOT NULL,
`tax` INTEGER GENERATED ALWAYS AS (price * 0.0675) STORED NOT NULL
)
CREATE TABLE [products] (
[price] INTEGER NOT NULL,
[tax] AS (price * 0.0675) PERSISTED
)
CREATE TABLE "products" (
"price" INTEGER NOT NULL,
"tax" INTEGER NOT NULL GENERATED ALWAYS AS (price * 0.0675) STORED
)
CREATE TABLE "PRODUCTS" (
"PRICE" NUMBER(10, 0) NOT NULL,
"TAX" NUMBER(10, 0) GENERATED ALWAYS AS (price * 0.0675)
)
Creates a virtual computed column. Computed columns are defined as expressions between other columns and/or constant values. Virtual computed columns are computed on every query.
Your database grammar may not differentiate between stored computed columns and virtual computed columns. Research your grammar's implementation for more details.
Argument | Type | Required | Default | Description |
expression | string | true | | The SQL used to define the computed column. |
SchemaBuilder
schema.create( "products", function( table ) {
table.integer( "price" );
table.integer( "tax" ).virtualAs( "price * 0.0675" );
} );
MySQL
SQL Server
Postgres
Oracle
CREATE TABLE `products` (
`price` INTEGER NOT NULL,
`tax` INTEGER GENERATED ALWAYS AS (price * 0.0675) VIRTUAL NOT NULL
)
CREATE TABLE [products] (
[price] INTEGER NOT NULL,
[tax] AS (price * 0.0675)
)
CREATE TABLE "products" (
"price" INTEGER NOT NULL,
"tax" INTEGER GENERATED ALWAYS AS (price * 0.0675) STORED
)
CREATE TABLE "PRODUCTS" (
"PRICE" NUMBER(10, 0) NOT NULL,
"TAX" NUMBER(10, 0) GENERATED ALWAYS AS (price * 0.0675) VIRTUAL
)
Last modified 10d ago