Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Миграции

Миграция — это файл, в котором кодом описано изменение базы данных: создать таблицу, добавить столбец. Миграции хранятся в проекте вместе с кодом, поэтому у всех разработчиков и на сервере структура базы одинаковая.

Подключение к базе

Параметры подключения задают в файле .env в корне проекта:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=secret

Создание миграции

php artisan make:migration create_posts_table

Файл появится в папке database/migrations. Дата в его имени задаёт порядок выполнения.

Описание таблицы

В методе up() описывают изменение, в методе down() — как его отменить:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
 
return new class extends Migration
{
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }
 
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

Типы столбцов

МетодЧто создаёт
id()Первичный ключ с автоувеличением
string('name')Короткая строка (до 255 символов)
text('body')Длинный текст
integer('views')Целое число
boolean('is_published')Логическое значение
timestamps()Столбцы created_at и updated_at

К столбцу добавляют уточнения: ->nullable() разрешает пустое значение, ->default(0) задаёт значение по умолчанию, ->unique() запрещает повторы.

Запуск

php artisan migrate

Laravel выполнит только те миграции, которые ещё не запускались. Последнюю партию отменяет команда php artisan migrate:rollback.

Изменение таблицы

Чтобы добавить столбец в существующую таблицу, создают новую миграцию и используют Schema::table():

public function up(): void
{
    Schema::table('posts', function (Blueprint $table) {
        $table->integer('views')->default(0);
    });
}
 
public function down(): void
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropColumn('views');
    });
}

Частая ошибка

Не редактируйте миграцию, которая уже выполнена: Laravel считает её применённой и повторно не запустит, а у коллег и на сервере база останется прежней. Для любого изменения создавайте новую миграцию.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.