Миграции
Миграция — это файл, в котором кодом описано изменение базы данных: создать таблицу, добавить столбец. Миграции хранятся в проекте вместе с кодом, поэтому у всех разработчиков и на сервере структура базы одинаковая.
Подключение к базе
Параметры подключения задают в файле .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 migrateLaravel выполнит только те миграции, которые ещё не запускались. Последнюю партию отменяет команда 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 считает её применённой и повторно не запустит, а у коллег и на сервере база останется прежней. Для любого изменения создавайте новую миграцию.