Columns
Creating Columns
Mit der table-Methode auf der Fassade Schema können Sie bestehende Tabellen aktualisieren. Wie die create-Methode akzeptiert die table-Methode zwei Argumente: den Namen der Tabelle und einen Closure, der eine Blueprint-Instanz erhält, mit der Sie der Tabelle Spalten hinzufügen können:
Schema::table('users', function (Blueprint $table) {
$table->string('email');
});
Available Column Types
Der Schema-Builder enthält eine Vielzahl von Spaltentypen, die Sie beim Aufbau Ihrer Tabellen angeben können:
Befehl |
Beschreibung |
$table->bigIncrements('id');
|
Auto-incrementing UNSIGNED BIGINT (primary key) equivalent column. |
$table->bigInteger('votes');
|
BIGINT equivalent column. |
$table->binary('data');
|
BLOB equivalent column. |
$table->boolean('confirmed');
|
BOOLEAN equivalent column. |
$table->char('name', 100);
|
CHAR equivalent column with an optional length. |
$table->date('created_at');
|
DATE equivalent column. |
$table->dateTime('created_at');
|
DATETIME equivalent column. |
$table->dateTimeTz('created_at');
|
DATETIME (with timezone) equivalent column. |
$table->decimal('amount' , 8, 2);
|
DECIMAL equivalent column with a precision (total digits) and scale (decimal digits). |
$table->double('amount' , 8, 2);
|
DOUBLE equivalent column with a precision (total digits) and scale (decimal digits). |
$table->enum('level', ['easy', 'hard']);
|
ENUM equivalent column. |
$table->float('amount' , 8, 2);
|
FLOAT equivalent column with a precision (total digits) and scale (decimal digits). |
$table->geometry('positions');
|
GEOMETRY equivalent column. |
$table->geometryCollection('positions');
|
GEOMETRYCOLLECTION equivalent column. |
$table->increments('id');
|
Auto-incrementing UNSIGNED INTEGER (primary key) equivalent column. |
$table->integer('votes');
|
INTEGER equivalent column. |
$table->ipAddress('visitor');
|
IP address equivalent column. |
$table->json('options');
|
JSON equivalent column. |
$table->jsonb('options');
|
JSONB equivalent column. |
$table->lineString('positions');
|
LINESTRING equivalent column. |
$table->longText('description');
|
LONGTEXT equivalent column. |
$table->macAddress('device');
|
MAC address equivalent column. |
$table->mediumIncrements('id');
|
Auto-incrementing UNSIGNED MEDIUMINT (primary key) equivalent column. |
$table->mediumInteger('votes');
|
MEDIUMINT equivalent column. |
$table->mediumText('description');
|
MEDIUMTEXT equivalent column. |
$table->morphs('taggable');
|
Adds
taggable_id
UNSIGNED BIGINT and
taggable_type
VARCHAR equivalent columns. |
$table->uuidMorphs('taggable');
|
Adds
taggable_id
CHAR(36) and
taggable_type
VARCHAR(255) UUID equivalent columns. |
$table->multiLineString('positions');
|
MULTILINESTRING equivalent column. |
$table->multiPoint('positions');
|
MULTIPOINT equivalent column. |
$table->multiPolygon('positions');
|
MULTIPOLYGON equivalent column. |
$table->nullableMorphs('taggable');
|
Adds nullable versions of
morphs()
columns. |
$table->nullableUuidMorphs('taggable');
|
Adds nullable versions of
uuidMorphs()
columns. |
$table->nullableTimestamps();
|
Alias of
timestamps()
method. |
$table->point('position');
|
POINT equivalent column. |
$table->polygon('positions');
|
POLYGON equivalent column. |
$table->rememberToken();
|
Adds a nullable
remember_token
VARCHAR(100) equivalent column. |
$table->set('flavors', ['strawberry', 'vanilla']);
|
SET equivalent column. |
$table->smallIncrements('id');
|
Auto-incrementing UNSIGNED SMALLINT (primary key) equivalent column. |
$table->smallInteger('votes');
|
SMALLINT equivalent column. |
$table->softDeletes();
|
Adds a nullable
deleted_at
TIMESTAMP equivalent column for soft deletes. |
$table->softDeletesTz();
|
Adds a nullable
deleted_at
TIMESTAMP (with timezone) equivalent column for soft deletes. |
$table->string('name', 100);
|
VARCHAR equivalent column with a optional length. |
$table->text('description');
|
TEXT equivalent column. |
$table->time('sunrise');
|
TIME equivalent column. |
$table->timeTz('sunrise');
|
TIME (with timezone) equivalent column. |
$table->timestamp('added_on');
|
TIMESTAMP equivalent column. |
$table->timestampTz('added_on');
|
TIMESTAMP (with timezone) equivalent column. |
$table->timestamps();
|
Adds nullable
created_at
and
updated_at
TIMESTAMP equivalent columns. |
$table->timestampsTz();
|
Adds nullable
created_at
and
updated_at
TIMESTAMP (with timezone) equivalent columns. |
$table->tinyIncrements('id');
|
Auto-incrementing UNSIGNED TINYINT (primary key) equivalent column. |
$table->tinyInteger('votes');
|
TINYINT equivalent column. |
$table->unsignedBigInteger('votes');
|
UNSIGNED BIGINT equivalent column. |
$table->unsignedDecimal('amount', 8, 2);
|
UNSIGNED DECIMAL equivalent column with a precision (total digits) and scale (decimal digits). |
$table->unsignedInteger('votes');
|
UNSIGNED INTEGER equivalent column. |
$table->unsignedMediumInteger('votes');
|
UNSIGNED MEDIUMINT equivalent column. |
$table->unsignedSmallInteger('votes');
|
UNSIGNED SMALLINT equivalent column. |
$table->unsignedTinyInteger('votes');
|
UNSIGNED TINYINT equivalent column. |
$table->uuid('id');
|
UUID equivalent column. |
$table->year('birth_year');
|
YEAR equivalent column. |
Column Modifiers
Zusätzlich zu den oben aufgeführten Spaltentypen gibt es mehrere Spalten-"Modifikatoren", die Sie beim Hinzufügen einer Spalte zu einer Datenbanktabelle verwenden können. Um die Spalte z.B. "löschbar" zu machen, können Sie die "nullable"-Methode verwenden:
Schema::table('users', function (Blueprint $table) {
$table->string('email')->nullable();
});
Unten ist eine Liste aller verfügbaren Spaltenmodifikatoren. Diese Liste enthält nicht die Indexmodifikatoren:
Modifikator |
Beschreibung |
->after('column')
|
Place the column "after" another column (MySQL) |
->autoIncrement()
|
Set INTEGER columns as auto-increment (primary key) |
->charset('utf8')
|
Specify a character set for the column (MySQL) |
->collation('utf8_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) |
Modifying Columns
Prerequisites (Voraussetzungen)
Bevor Sie eine Spalte ändern, fügen Sie die doctrine/dbal Abhängigkeit zu Ihrer composer.json Datei hinzu. Die Doctrine DBAL-Bibliothek wird verwendet, um den aktuellen Zustand der Spalte zu ermitteln und die SQL-Abfragen zu erstellen, die für die angegebenen Anpassungen der Spalte erforderlich sind:
composer require doctrine/dbal
Updating Column Attributes
Die change-Methode erlaubt es Ihnen, einige bestehende Spaltentypen auf einen neuen Typ zu ändern oder die Attribute der Spalte zu modifizieren. Beispielsweise können Sie die Größe einer String-Spalte erhöhen. Um die change-Methode in Aktion zu sehen, lassen Sie uns die Größe der Namensspalte von 25 auf 50 erhöhen:
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->change();
});
Wir könnten auch eine Spalte so modifizieren, dass sie löschbar ist:
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->nullable()->change();
});
Nur die folgenden Spaltentypen können "geändert" werden: bigInteger, binär, boolean, date, dateTime, dateTimeTz, dezimal, integer, json, longText, mediumText, smallInteger, string, text, time, unsignedBigInteger, unsignedInteger und unsignedSmallInteger.
Renaming Columns
Um eine Spalte umzubenennen, können Sie die Methode renameColumn im Schema-Builder verwenden. Bevor Sie eine Spalte umbenennen, stellen Sie sicher, dass Sie die doctrine/dbal-Abhängigkeit zu Ihrer composer.json-Datei hinzufügen:
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
Das Umbenennen einer beliebigen Spalte in einer Tabelle, die auch eine Spalte vom Typ enum hat, wird derzeit nicht unterstützt.
Dropping Columns
Um eine Spalte zu löschen, verwenden Sie die dropColumn-Methode im Schema-Builder. Bevor Sie Spalten aus einer SQLite-Datenbank löschen, müssen Sie die doctrine/dbal-Abhängigkeit zu Ihrer composer.json-Datei hinzufügen und den composer update Befehl in Ihrem Terminal ausführen, um die Bibliothek zu installieren:
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
});
Sie können mehrere Spalten aus einer Tabelle löschen, indem Sie ein Array mit Spaltennamen an die dropColumn-Methode übergeben:
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['votes', 'avatar', 'location']);
});
Das Löschen oder Ändern von mehreren Spalten innerhalb einer einzigen Migration bei Verwendung einer SQLite-Datenbank wird nicht unterstützt.
Available Command Aliases
Befehl |
Beschreibung |
$table->dropMorphs('morphable');
|
Löscht die Spalten morphable_id und morphable_type. |
$table->dropRememberToken();
|
Löscht die Spalte remember_token. |
$table->dropSoftDeletes();
|
Löscht die Spalte deleted_at. |
$table->dropSoftDeletesTz();
|
Alias der dropSoftDeletes()-Methode. |
$table->dropTimestamps();
|
Löscht die Spalten created_at und updated_at. |
$table->dropTimestampsTz();
|
Alias der dropTimestamps()-Methode. |