Класс Migration
Класс Migration является базовым классом для всех миграций в Laravel. Каждая миграция содержит два основных метода: up, который выполняет изменения базы данных, и down, который откатывает эти изменения. Миграции позволяют управлять схемой базы данных через код, что упрощает совместную работу и контроль версий.
Структура класса Migration
Каждый класс миграции наследуется от базового класса Migration и должен содержать методы up и down. В методе up определяются изменения структуры таблиц, а в методе down описывается откат этих изменений.
Синтаксис
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
}
?>
Пример создания таблицы
Давайте создадим миграцию для таблицы 'articles' с различными типами полей:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateArticlesTable extends Migration
{
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->string('title', 200);
$table->text('description');
$table->integer('views')->default(0);
$table->boolean('is_published')->default(false);
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('articles');
}
}
?>
Пример изменения таблицы
Миграции также позволяют изменять существующие таблицы. Давайте добавим поле 'category' в таблицу 'articles':
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddCategoryToArticlesTable extends Migration
{
public function up()
{
Schema::table('articles', function (Blueprint $table) {
$table->string('category', 100)->nullable();
});
}
public function down()
{
Schema::table('articles', function (Blueprint $table) {
$table->dropColumn('category');
});
}
}
?>
Пример удаления таблицы
Для удаления таблицы используется метод dropIfExists фасада Schema:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class DropArticlesTable extends Migration
{
public function up()
{
Schema::dropIfExists('articles');
}
public function down()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
}
?>
Пример с внешним ключом
Рассмотрим создание таблицы с внешним ключом и ограничениями:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCommentsTable extends Migration
{
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->text('comment');
$table->foreignId('article_id')->constrained('articles')->cascadeOnDelete();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->boolean('is_approved')->default(false);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('comments');
}
}
?>