{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 5:19:26, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Введение == Миграции - что-то вроде системы контроля версий для вашей базы данных. Они позволяют команде изменять её структуру, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с ((docs/v4/schema построителем структур)) для более простого обращения с архитектурой вашего приложения. == Создание миграций == Для создания новой миграции вы можете использовать команду **migrate:make** командного интерфейса ((docs/v4/artisan Artisan)): %%(sh) php artisan migrate:make create_users_table %% Миграция будет помещена в папку %%(t)app/database/migrations%% и будет содержать текущее время, которое позволяет библиотеке определять порядок применения миграций. При создании миграции вы можете также передать параметр %%(t)--path%%. Путь должен быть относительным к папке вашей установки Laravel: %%(sh) php artisan migrate:make foo --path=app/migrations %% Можно также использовать параметры %%(t)--table%% и %%(t)--create%% для указания имени таблицы и того факта, что миграция будет создавать новую таблицу (!!(tl_note)а не изменять существующую - //прим. пер.//!!): %%(sh) php artisan migrate:make add_votes_to_user_table --table=users php artisan migrate:make create_users_table --create=users %% == Применение миграций == **Накатывание всех неприменённых миграций** %%(sh) php artisan migrate %% **Накатывание новых миграций в указанной папке** %%(sh) php artisan migrate --path=app/foo/migrations %% **Накатывание новых миграций для пакета** %%(sh) php artisan migrate --package=vendor/package %% .(alert) **Внимание:** если при применении миграций вы сталкиваетесь с ошибкой "Class not found" ("Класс не найден") - попробуйте выполнить команду %%(sh)composer dump-autoload%%. %%(DOCNEW 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15) === Принудительные миграции в работающем приложении === Некоторые операции миграций разрушительны, они могут привести к потере ваших данных. Для предотвращения случайного запуска этих команд на вашей боевой БД перед их выполнением запрашивается подтверждение. Для принудительного запуска команд без подтверждения используйте ключ %%(t)--force%%: %%(sh) php artisan migrate --force ~%% %% == Откат миграций == **Отмена изменений последней миграции** %%(sh) php artisan migrate:rollback %% **Отмена изменений всех миграций** %%(sh) php artisan migrate:reset %% **Откат всех миграций и их повторное применение** %%(sh) php artisan migrate:refresh php artisan migrate:refresh --seed %% == ((#начальные)) Загрузка начальных данных в БД == Кроме миграций, описанных выше, Laravel также включает в себя механизм наполнения вашей БД начальными данными (//seeding//) с помощью специальных классов. Все такие классы хранятся в %%(t)app/database/seeds%%. Они могут иметь любое имя, но вам, вероятно, следует придерживаться какой-то логики в их именовании - например, %%UserTableSeeder%% и т.д. По умолчанию для вас уже определён класс %%DatabaseSeeder%%. Из этого класса вы можете вызывать метод %%call()%% для подключения других классов с данными, что позволит вам контролировать порядок их выполнения. **Примерные классы для загрузки начальных данных** %% 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** ((docs/v4/artisan Artisan)): %%(sh) php artisan db:seed %% По умолчанию команда **db:seed** вызывает класс %%DatabaseSeeder%%, который может быть использован для вызова других классов, заполняющих БД данными. Однако, вы можете использовать параметр %%(t)--class%% для указания конкретного класса для вызова: %% php artisan db:seed --class=UserTableSeeder %% Либо вы можете сделать это командой **migrate:refresh**, которая также откатит и заново применит все ваши миграции: %%(sh) php artisan migrate:refresh --seed %%