1. Введение в Laravel Migrations
Миграции Laravel представляют собой систему контроля версий для вашей базы данных. Это позволяет команде разработчиков легко изменять и делиться схемой базы данных приложения
// Пример базовой миграции
php artisan make:migration create_users_table
// Сгенерированный файл
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
2. Почему миграции важны
- Контроль версий схемы базы данных
- Совместная работа в команде
- Автоматизация развертывания
- Возможность отката изменений
3. Создание и выполнение миграций
// Создание миграции
php artisan make:migration add_phone_to_users_table
// Добавление нового поля
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('phone')->nullable();
});
}
// Откат изменений
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('phone');
});
}
// Выполнение миграций
php artisan migrate
// Откат последней миграции
php artisan migrate:rollback
4. Лучшие практики управления изменениями схемы
a. Соглашения об именовании
// Правильно
create_users_table
add_phone_to_users_table
create_user_profiles_table
// Неправильно
users
new_field
update_db
b. Избегание потери данных при обновлениях
// Безопасное изменение колонки
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('name', 100)->change();
});
}
// Добавление временной колонки
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('name_new')->nullable();
// Здесь можно добавить код для переноса данных
});
}
c. Контроль версий и откаты
// Проверка существования таблицы
if (!Schema::hasTable('users')) {
Schema::create('users', function (Blueprint $table) {
// ...
});
}
// Проверка существования колонки
if (!Schema::hasColumn('users', 'phone')) {
Schema::table('users', function (Blueprint $table) {
$table->string('phone')->nullable();
});
}
d. Тестирование перед развертыванием
// Создание тестовой базы данных
php artisan migrate --env=testing
// Откат всех миграций и их повторное выполнение
php artisan migrate:fresh
5. Использование сидеров вместе с миграциями
// Создание сидера
php artisan make:seeder UsersTableSeeder
// Пример сидера
class UsersTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->insert([
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => Hash::make('password')
]);
}
}
// Запуск сидеров
php artisan db:seed
6. Распространенные ошибки и как их избежать
// Ошибка: Отсутствие down() метода
public function down()
{
// Всегда определяйте метод down()
Schema::dropIfExists('users');
}
// Ошибка: Неправильный порядок зависимостей
// Сначала создаем родительскую таблицу
Schema::create('users', function (Blueprint $table) {
$table->id();
});
// Затем создаем зависимую таблицу
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
});
7. Заключение
Миграции Laravel - мощный инструмент для управления схемой базы данных. Следуя этим практикам, вы можете:
- Поддерживать чистоту и организованность кода
- Избегать конфликтов при командной разработке
- Обеспечивать безопасное обновление базы данных
- Упростить процесс развертывания
// Полезные команды для работы с миграциями
php artisan migrate:status // Проверка статуса миграций
php artisan migrate:reset // Откат всех миграций
php artisan migrate:refresh // Откат и повторное выполнение всех миграций
php artisan migrate:fresh --seed // Пересоздание базы данных с сидами