Метод after
Метод after применяется к определению колонки в схеме базы данных и позволяет задать, после какой существующей колонки должна быть размещена новая колонка. Этот метод полезен при изменении структуры таблицы, когда важно контролировать порядок полей. Метод принимает один параметр - имя колонки, после которой будет размещена текущая колонка.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->field_type('column_name')->after('existing_column');
});
?>
Пример
Давайте добавим колонку 'phone' после колонки 'email' в таблице 'users':
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('phone', 20)->after('email')->nullable();
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('phone');
});
}
};
?>
Пример
Добавим несколько колонок с разным порядком следования в таблице 'articles':
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::table('articles', function (Blueprint $table) {
$table->string('subtitle')->after('title')->nullable();
$table->text('description')->after('subtitle')->nullable();
$table->boolean('is_published')->after('description')->default(false);
});
}
public function down()
{
Schema::table('articles', function (Blueprint $table) {
$table->dropColumn(['subtitle', 'description', 'is_published']);
});
}
};
?>
Пример
При создании новой таблицы метод after также может использоваться. Создадим таблицу 'posts' с указанием порядка колонок:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug')->after('title')->unique();
$table->text('content')->after('slug');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
};
?>