Может войдёшь?
Черновики Написать статью Профиль

Миграции и начальные данные

перевод документация 4.x

  1. 1. Введение
  2. 2. Создание миграций
  3. 3. Применение миграций
    1. 3.1. Принудительные миграции в работающем приложении
  4. 4. Откат миграций
  5. 5. Загрузка начальных данных в БД
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Введение

Миграции — что-то вроде системы контроля версий для вашей базы данных. Они позволяют команде изменять её структуру, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с построителем структур для более простого обращения с архитектурой вашего приложения.

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

Для создания новой миграции вы можете использовать команду 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

добавлено в 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() для подключения других классов с данными, что позволит вам контролировать порядок их выполнения.

Примерные классы для загрузки начальных данных

PHP
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
php artisan db:seed --class=UserTableSeeder

Либо вы можете сделать это командой migrate:refresh, которая также откатит и заново применит все ваши миграции:

shphp artisan migrate:refresh --seed

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.