git 6f3434990d7bef4030e5397737978b128d83c955
Миграции - это что-то вроде системы контроля версий для вашей базы данных. Они позволяют команде программистов изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с конструктором таблиц для более простого обращения с архитектурой вашего приложения.
Для создания новой миграции вы можете использовать команду make:migrate
:
php artisan make:migrate create_users_table
Миграция будет помещена в папку database/migrations
и будет содержать текущее время, которое позволяет библиотеке определять порядок применения миграций.
Примечание: Старайтесь давать миграциям многословные имена - например, не
comments
, аcreate_comments_table
- так вы избежите возможного конфликта названий классов.
Можно также использовать параметры --table
и --create
для указания имени таблицы и того факта, что миграция будет создавать новую таблицу, а не изменять существующую.
php artisan make:migrate create_users_table --table=users --create
php artisan migrate
Внимание: если при применении миграций вы сталкиваетесь с ошибкой "class not found" ("Класс не найден") - попробуйте выполнить команду
composer dump-autoload
.
Если ошибиться в написании миграций, то можно потерять данные в БД. Поэтому при применении миграций на рабочем сервере (рабочая среда по умолчанию, production) Laravel спрашивает подтверждения операции. Чтобы этого не происходило, например, для применения миграций в автоматическом режиме во время деплоя (загрузки) приложения на сервер, используйте ключ --force
:
php artisan migrate --force
php artisan migrate:rollback
php artisan migrate:reset
php artisan migrate:refresh
php artisan migrate:refresh --seed
Кроме миграций, описанных выше, Laravel также включает в себя механизм наполнения вашей БД начальными данными (seeding) с помощью специальных классов. Все такие классы хранятся в 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
:
php artisan db:seed
По умолчанию команда db:seed
запускает метод run()
класса DatabaseSeeder
. В этом методе вы можете вызывать другие ваши сидеры. Или, вы можете задать название класса, который будет вызван вместо дефолтного:
php artisan db:seed --class=UserTableSeeder
Вы также можете заполнить БД первоначальными данными командой migrate:refresh
, которая перед этим откатит и заново применит все ваши миграции:
php artisan migrate:refresh --seed