Введение
Миграции — что-то вроде системы контроля версий для вашей базы данных. Они позволяют команде изменять её структуру, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с построителем структур для более простого обращения с архитектурой вашего приложения.
Создание миграций
Для создания новой миграции вы можете использовать команду migrate:make командного интерфейса Artisan:
shphp artisan migrate:make create_users_table
Миграция будет помещена в папку app/database/migrations и будет содержать текущее время, которое позволяет библиотеке определять порядок применения миграций.
При создании миграции вы можете также передать параметр --path. Путь должен быть относительным к папке вашей установки Laravel:
shphp artisan migrate:make foo --path=app/migrations
Можно также использовать параметры --table и --create для указания имени таблицы и того факта, что миграция будет создавать новую таблицу (а не изменять существующую — прим. пер.):
shphp artisan migrate:make add_votes_to_user_table --table=users php artisan migrate:make create_users_table --create=users
Применение миграций
Накатывание всех неприменённых миграций
shphp artisan migrate
Накатывание новых миграций в указанной папке
shphp artisan migrate --path=app/foo/migrations
Накатывание новых миграций для пакета
shphp artisan migrate --package=vendor/package
Внимание: если при применении миграций вы сталкиваетесь с ошибкой «Class not found» («Класс не найден») — попробуйте выполнить команду shcomposer dump-autoload
.
добавлено в 4.2 ()
Принудительные миграции в работающем приложении
Некоторые операции миграций разрушительны, они могут привести к потере ваших данных. Для предотвращения случайного запуска этих команд на вашей боевой БД перед их выполнением запрашивается подтверждение. Для принудительного запуска команд без подтверждения используйте ключ --force:
shphp artisan migrate --force
Откат миграций
Отмена изменений последней миграции
shphp artisan migrate:rollback
Отмена изменений всех миграций
shphp artisan migrate:reset
Откат всех миграций и их повторное применение
shphp artisan migrate:refresh php artisan migrate:refresh --seed
Загрузка начальных данных в БД
Кроме миграций, описанных выше, Laravel также включает в себя механизм наполнения вашей БД начальными данными (seeding) с помощью специальных классов. Все такие классы хранятся в app/database/seeds. Они могут иметь любое имя, но вам, вероятно, следует придерживаться какой-то логики в их именовании — например, PHPUserTableSeeder
и т.д. По умолчанию для вас уже определён класс PHPDatabaseSeeder
. Из этого класса вы можете вызывать метод PHPcall()
для подключения других классов с данными, что позволит вам контролировать порядок их выполнения.
Примерные классы для загрузки начальных данных
class DatabaseSeeder extends Seeder {
public function run()
{
$this->call('UserTableSeeder');
$this->command->info('Таблица пользователей загружена данными!');
}
}
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
User::create(array('email' => 'foo@bar.com'));
}
}
Для добавления данных в БД используйте команду db:seed Artisan:
shphp artisan db:seed
По умолчанию команда db:seed вызывает класс PHPDatabaseSeeder
, который может быть использован для вызова других классов, заполняющих БД данными. Однако, вы можете использовать параметр --class для указания конкретного класса для вызова:
php artisan db:seed --class=UserTableSeeder
Либо вы можете сделать это командой migrate:refresh, которая также откатит и заново применит все ваши миграции:
shphp artisan migrate:refresh --seed