Миграции в Laravel — это система контроля версий для структуры базы данных, позволяющая безопасно изменять схему БД в команде.
database/migrations/
up()
и down()
migrations
Генерация новой миграции:
php artisan make:migration create_users_table
Для модели с миграцией:
php artisan make:model User -m
Пример миграции для создания таблицы:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
// Выполнение миграции
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id(); // BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
$table->string('name'); // VARCHAR(255)
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken(); // VARCHAR(100) NULLABLE
$table->timestamps(); // created_at и updated_at
});
}
// Откат миграции
public function down()
{
Schema::dropIfExists('users');
}
}
Метод | Описание | SQL-эквивалент |
---|---|---|
$table->id() |
Автоинкрементный первичный ключ | BIGINT UNSIGNED PK AI |
$table->string() |
Строковое поле | VARCHAR |
$table->text() |
Длинный текст | TEXT |
$table->integer() |
Целое число | INT |
$table->float() |
Число с плавающей точкой | FLOAT |
$table->boolean() |
Логическое значение | TINYINT(1) |
$table->date() |
Дата | DATE |
$table->json() |
JSON-данные | JSON |
$table->string('email')->unique()->nullable();
$table->decimal('amount', 8, 2)->default(0.00);
$table->unsignedBigInteger('user_id')->index();
$table->foreign('user_id')->references('id')->on('users');
Основные команды:
# Выполнить все новые миграции
php artisan migrate
# Откатить последнюю миграцию
php artisan migrate:rollback
# Откатить все миграции
php artisan migrate:reset
# Перезапустить все миграции (rollback + migrate)
php artisan migrate:refresh
# Показать статус миграций
php artisan migrate:status
$table->foreignId('user_id')
->constrained()
->onUpdate('cascade')
->onDelete('cascade');
Schema::table('users', function (Blueprint $table) {
$table->string('phone')->after('email');
});
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('name');
});
DB::table('roles')->insert([
['name' => 'Admin'],
['name' => 'User']
]);
}
up()
(применить) и down()
(откатить)Для сложных проектов рекомендуется:
migrate:fresh
только в разработке