参考:https://www.jianshu.com/p/4ad6c9239aa8
- 什么是数据库迁移?
数据库迁移就像是数据库的版本控制,可以让团队轻松修改并共享应用程序的数据库结构,避免不断修改复制数据库表结构的麻烦。
迁移文件将会被放置在 database/migrations 目录下。一个migration文件包含两部分:up可为数据添加新的数据表字段或索引,down则是用于执行回滚操作。 - 创建迁移文件
php artisan make:migration create_users_table --create=users
注意:create_users_table 为迁移文件的文件名; --create 指定迁移被执行时会创建的新数据表名,该表名为 users - 执行迁移
php artisan migrate 运行所有未运行过的迁移,也就是将数据库不存在的迁移放入数据库。生成的数据表默认字符集为 utf8mb4,排序规则 utf8mb4_unicode_ci - 回滚操作
php artisan migrate:rollback(对上一次执行的[批量]迁移回滚,其中可能包含多个迁移文件)
php artisan migrate:rollback --step=3(回滚上一次执行的最后3个迁移)
php artisan migrate:reset(回滚应用程序中的所有迁移) - 添加或者修改已经迁移的表字段
a. 创建迁移文件:php artisan make:migration change_user_table --table=users(–table 可用来指定数据表的名称)
b. 编辑up方法:
c. 执行迁移:php artisan migrate(执行完会发现数据已经有deleted_at字段)Schema::table('users', function (Blueprint $table) { if (!Schema::hasColumn('users','deleted_at')) { $table->softDeletes();//添加软删除功能,会在users表中添加deleted_at字段 } });
- 数据填充
我们可以使用 laravel 框架的seeder类来执行数据填充,所有由框架生成的 seeders 都将被放置在 database/seeds 目录下
(1)使用
创建填充文件:php artisan make:seeder UsersTableSeeder
a. 填充单条数据:
在 run 方法下,填充数据
\Illuminate\Support\Facades\DB::table('users')->insert([ 'name' => str_random(10), 'email' => str_random(10).'@gmail.com', 'password'=> bcrypt('123'), ]);
执行:在 DatabaseSeeder 下的 run 方法里,使用call方法执行额外的填充类($this->call(UserTableSeeder::class);)
将数据插入数据库:php artisan db:seed
b. 批量填充数据:模型工厂
在database/factories下重命名ModelFactory为UserFactory.php
修改UserTableSeeder下的run方法:factory(App\User::class,50)->create();(造出来50条数据)
执行:在 DatabaseSeeder 下的 run 方法里,使用call方法执行额外的填充类
将数据插入数据库:php artisan db:seed - 可能报错
(1)删除users的迁移文件再次创建时报错include(D:…\vendor\composer/…/…/database/migrations/2014_10_12_000000_create_users_table.php): failed to open stream: No such file or directory
原因:php artisan make:migration create_users_table创建数据库迁移文件后,会在autoload_static.php和autoload_classmap.php这两个文件中添加迁移文件的缓存,所以再次执行创建数据库迁移文件命令时,会报上面的错误。
解决:执行composer dump-autoload更新这两个文件 或者 运行composer update 或者 删除vendor/composer/autoload_classmap.php和autoload_static.php里面的create_users_table