Column Modifiers
In addition to the column types listed in Creating Columns, there are several column "modifiers" you may use while adding a column to a database table. For example, to make the column "nullable", you may use thenullable
method:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTestTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('test', function (Blueprint $table) {
$table->increments('id');
$table->text('test_name');
$table->string('test_type')->nullable();
$table->text('desc');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('test', function (Blueprint $table) {
$table->dropColumn(['desc']);
});
}
}
The following list contains all available column modifiers. This list does not include the index modifiers:
Modifier | Description |
---|---|
->after('column') |
Place the column "after" another column (MySQL) |
->autoIncrement() |
Set INTEGER columns as auto-increment (primary key) |
->charset('utf8mb4') |
Specify a character set for the column (MySQL) |
->collation('utf8mb4_unicode_ci') |
Specify a collation for the column (MySQL/PostgreSQL/SQL Server) |
->comment('my comment') |
Add a comment to a column (MySQL/PostgreSQL) |
->default($value) |
Specify a "default" value for the column |
->first() |
Place the column "first" in the table (MySQL) |
->nullable($value = true) |
Allows (by default) NULL values to be inserted into the column |
->storedAs($expression) |
Create a stored generated column (MySQL) |
->unsigned() |
Set INTEGER columns as UNSIGNED (MySQL) |
->useCurrent() |
Set TIMESTAMP columns to use CURRENT_TIMESTAMP as default value |
->virtualAs($expression) |
Create a virtual generated column (MySQL) |
->generatedAs($expression) |
Create an identity column with specified sequence options (PostgreSQL) |
->always() |
Defines the precedence of sequence values over input for an identity column (PostgreSQL) |
Default Expressions
The default
modifier accepts a value or an \Illuminate\Database\Query\Expression
instance. Using an Expression
instance will prevent wrapping the value in quotes and allow you to use database specific functions. One situation where this is particularly useful is when you need to assign default values to JSON columns:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Query\Expression;
use Illuminate\Database\Migrations\Migration;
class CreateFlightsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->json('movies')->default(new Expression('(JSON_ARRAY())'));
$table->timestamps();
});
}
}
?>