|
| 1 | +# 数据库迁移 & 数据填充 |
| 2 | + |
| 3 | +- [简介](#introduction) |
| 4 | +- [创建数据迁移](#creating-migrations) |
| 5 | +- [运行数据迁移](#running-migrations) |
| 6 | +- [回滚数据迁移](#rolling-back-migrations) |
| 7 | +- [数据库填充](#database-seeding) |
| 8 | + |
| 9 | +<a name="introduction"></a> |
| 10 | +## 简介 |
| 11 | + |
| 12 | +Migrations是一种数据库版本控制功能.它允许团队开发者修改数据库结构,并使其保持最新状态.Migrations通常和[结构生成器](/docs/schema) 配合使用来管理您的应用程序结构. |
| 13 | + |
| 14 | +<a name="creating-migrations"></a> |
| 15 | +## 创建数据迁移 |
| 16 | + |
| 17 | +使用 Artisan 命令行的 `migrate:make` 命令创建一个迁移:(在命令行模式下使用) |
| 18 | + |
| 19 | + php artisan migrate:make create_users_table |
| 20 | + |
| 21 | +所有的迁移都被存放在 `app/database/migrations` 文件夹下,文件以时间戳命名以方便Laravel框架按时间来界定这些文件顺序. |
| 22 | + |
| 23 | +您可以在创建迁移的时候使用 `--path` 选项,用来指定迁移文件存放的路径.该路径是你安装框架根目录的相对路径: |
| 24 | + |
| 25 | + php artisan migrate:make foo --path=app/migrations |
| 26 | + |
| 27 | +`--table` 和 `--create` 选项用来指定表名以及是否创建一个新表: |
| 28 | + |
| 29 | + php artisan migrate:make add_votes_to_user_table --table=users |
| 30 | + |
| 31 | + php artisan migrate:make create_users_table --create=users |
| 32 | + |
| 33 | +<a name="running-migrations"></a> |
| 34 | +## 运行数据迁移 |
| 35 | + |
| 36 | +#### 运行所有迁移(使你的所有表保持最新) |
| 37 | + |
| 38 | + php artisan migrate |
| 39 | + |
| 40 | +#### 运行某个路径下的所有迁移(指定迁移文件路径) |
| 41 | + |
| 42 | + php artisan migrate --path=app/foo/migrations |
| 43 | + |
| 44 | +#### 运行某个包下的所有迁移(安装或升级某个扩展包对应数据库时候使用) |
| 45 | + |
| 46 | + php artisan migrate --package=vendor/package |
| 47 | + |
| 48 | +> **注意:** 如果在运行迁移的时候收到一个 "class not found" 的错误,请尝试运行 `composer dump-autoload` 命令. |
| 49 | +
|
| 50 | +### 在生产环境中强制使用数据迁移 |
| 51 | + |
| 52 | +有些迁移操作具有破坏性,会导致你丢失数据库中原有数据.为了防止你运行这样的命令造成不必要的破坏,这些命令运行的时候会询问你是否确定要这样做.如果你想运行这样的命令而不出现提示,可以使用 `--force` 选项: |
| 53 | + |
| 54 | + php artisan migrate --force |
| 55 | + |
| 56 | +<a name="rolling-back-migrations"></a> |
| 57 | +## 回滚数据迁移(即使回滚,原有数据也被破坏了,只能回滚表结构,所以别拿这个功能当救命稻草) |
| 58 | + |
| 59 | +#### 回滚最后一次迁移 |
| 60 | + |
| 61 | + php artisan migrate:rollback |
| 62 | + |
| 63 | +#### 回滚所有迁移 |
| 64 | + |
| 65 | + php artisan migrate:reset |
| 66 | + |
| 67 | +#### 回滚所有迁移并重新运行数据迁移 |
| 68 | + |
| 69 | + php artisan migrate:refresh |
| 70 | + |
| 71 | + php artisan migrate:refresh --seed |
| 72 | + |
| 73 | +<a name="database-seeding"></a> |
| 74 | +## 数据库填充 |
| 75 | + |
| 76 | +Laravel 可以非常简单的使用数据填充类(seed classes)帮你生成一些测试数据放到数据库中去.所有的数据填充类(seed classes)都存放在 `app/database/seeds` 路径下.数据填充类(seed classes)你可以随便命名,但最好遵循一些合理的约定,例如 `UserTableSeeder` 等. `DatabaseSeeder`是一个已经生成好的默认类(它将默认被执行,你也可以把这个当作例子).在这个类(DatabaseSeeder)中,你可以使用 `call` 方法来运行其他数据填充类,这样你就能控制数据填充的顺序了. |
| 77 | + |
| 78 | +#### 数据库填充类的例子 |
| 79 | + |
| 80 | + class DatabaseSeeder extends Seeder { |
| 81 | + |
| 82 | + public function run() |
| 83 | + { |
| 84 | + $this->call('UserTableSeeder'); |
| 85 | + |
| 86 | + $this->command->info('User table seeded!'); |
| 87 | + } |
| 88 | + |
| 89 | + } |
| 90 | + |
| 91 | + class UserTableSeeder extends Seeder { |
| 92 | + |
| 93 | + public function run() |
| 94 | + { |
| 95 | + DB::table('users')->delete(); |
| 96 | + |
| 97 | + User::create(array('email' => '[email protected]')); |
| 98 | + } |
| 99 | + |
| 100 | + } |
| 101 | + |
| 102 | +使用 Artisan 命令行的 `db:seed` 命令填充数据库: |
| 103 | + |
| 104 | + php artisan db:seed |
| 105 | + |
| 106 | +默认情况下 `db:seed` 命令运行的是 `DatabaseSeeder` 类, 这个类中可以(像上面的例子中那样)调用其他seed类. 但是你也可以使用 `--class` 选项来单独运行指定数据库填充类 : |
| 107 | + |
| 108 | + php artisan db:seed --class=UserTableSeeder |
| 109 | + |
| 110 | +您也可以使用 `migrate:refresh` 命令,这将回滚并重新运行所有数据库迁移: |
| 111 | + |
| 112 | + php artisan migrate:refresh --seed |
0 commit comments