Skip to content

迁移与填充

介绍

迁移是数据库的一种版本控制方式。它们允许团队修改数据库架构,并保持对当前架构状态的更新。迁移通常与架构构建器配对,以便轻松管理应用程序的架构。

创建迁移

要创建迁移,可以在 Artisan CLI 上使用 migrate:make 命令:

php
php artisan migrate:make create_users_table

迁移将放置在 app/database/migrations 文件夹中,并包含一个时间戳,以便框架确定迁移的顺序。

您还可以在创建迁移时指定 --path 选项。路径应相对于您安装的根目录:

php
php artisan migrate:make foo --path=app/migrations

--table--create 选项也可以用来指示表的名称,以及迁移是否将创建一个新表:

php
php artisan migrate:make add_votes_to_user_table --table=users

php artisan migrate:make create_users_table --create=users

运行迁移

运行所有未完成的迁移

php
php artisan migrate

为路径运行所有未完成的迁移

php
php artisan migrate --path=app/foo/migrations

为包运行所有未完成的迁移

php
php artisan migrate --package=vendor/package
lightbulb

如果在运行迁移时收到“类未找到”错误,请尝试运行 composer dump-autoload 命令。

在生产环境中强制迁移

某些迁移操作是破坏性的,可能会导致您丢失数据。为了保护您不在生产数据库上运行这些命令,系统会在执行这些命令之前提示您确认。要强制命令在没有提示的情况下运行,请使用 --force 标志:

php
php artisan migrate --force

回滚迁移

回滚最后一次迁移操作

php
php artisan migrate:rollback

回滚所有迁移

php
php artisan migrate:reset

回滚所有迁移并重新运行所有迁移

php
php artisan migrate:refresh

php artisan migrate:refresh --seed

数据库填充

Laravel 还提供了一种简单的方法,通过填充类向数据库填充测试数据。所有填充类都存储在 app/database/seeds 中。填充类可以有您希望的任何名称,但最好遵循一些合理的约定,例如 UserTableSeeder 等。默认情况下,为您定义了一个 DatabaseSeeder 类。从这个类中,您可以使用 call 方法运行其他填充类,从而控制填充顺序。

示例数据库填充类

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'));
	}

}

要填充数据库,可以在 Artisan CLI 上使用 db:seed 命令:

php
php artisan db:seed

默认情况下,db:seed 命令运行 DatabaseSeeder 类,您可以用它来调用其他填充类。然而,您可以使用 --class 选项单独指定要运行的特定填充类:

php
php artisan db:seed --class=UserTableSeeder

您还可以使用 migrate:refresh 命令填充数据库,这将回滚并重新运行所有迁移:

php
php artisan migrate:refresh --seed