laravel开发过程中,总是要执行迁移文件,创建或修改数据,还是把几个常用的命令记下来:
1.通过迁移文件生成数据库
php artisan migrate #生成数据库
php artisan migrate --seed生成数据表同时初始化数据
2.seeder创建
php artisan make:seeder AdminTableSeeder #新建一个seeder
3.给数据库初始化数据
php artisan db:seed --class=UsersTableSeeder
如果在执行:php artisan db:seed --class=UsersTableSeeder的时候报类似下面的错误,可以通过composer dump-autoload命令解决 
4.创建生成表的迁移文件
php artisan make:migration create_{$table_name}_table --create={$table_name} #注意 {$table_name} 就是table_name 实际不用加 {$}符号
php artisan make:migration create_users_table --create=users #同上,用于创建users表
5.修改迁移文件
php artisan make:migration add_votes_to_users_table --table=users #用于修改users表,给votes加个字段
6.注意点: 通过指定migrate的path来选择性生成数据库,避免重复 导致报错
php artisan migrate --path=/database/migrations/2018_12_13_082054_create_coupon_category_table.php (up)
php artisan migrate:rollback --path=/database/migrations/2020_03_25_104544_add_repair_type_to_edu_chapters_table.php (down)
7.数据库回滚操作
php artisan migrate:reset // 这个命令会将之前所有的迁移文件全部删除,就像格式化一样(回滚所有)
php artisan migrate:rollback // 这个命令会回滚最新的一次迁移操作,有一种场景很奇怪,很危险,就是我迁移文件里有的执行失败了,有的成功了,结果我想重新执行,自然会报 表已经存在的错误,于是乎 就想回滚一下,我没有指定任何迁移文件,结果我之前的迁移表全部没有了,而不是把我当前执行有错的回滚了,相当于 1 2 3(有错误) , 就剩1了,2 没了 3 也没了
php artisan migrate:refresh //这个命令会回滚所有操作,然后再执行migrate
8.个人建议,如果一个迁移文件下有多个表操作,可以按照下面的方式执行
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//通过 try catch 捕获异常,然后drop,算是回滚了,这个是 mysql的 DDL 操作,自然不能用 transaction 操作,这个对 DML 有效
try{
// 用户表
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id')->comment('ID');
$table->string('avatar')->nullable()->comment('头像');
$table->string('nickname', 100)->comment('昵称');
$table->timestamp('created_at')->nullable()->comment('创建时间');
$table->timestamp('updated_at')->nullable()->comment('修改时间');
});
DB::statement('alter table ' . config('database.connections.mysql.prefix', '') . 'users comment "用户表"');
// 用户日志表
Schema::create('user_logs', function (Blueprint $table) {
$table->bigIncrements('id')->comment('ID');
$table->timestamp('created_at')->nullable()->comment('创建时间');
$table->timestamp('updated_at')->nullable()->comment('修改时间');
$table->unsignedBigInteger('user_id')->comment('用户ID');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
DB::statement('alter table ' . config('database.connections.mysql.prefix', '') . 'user_logs comment "用户日志表"');
}catch(PDOException $ex){
$this->down();
throw $ex;
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
Schema::dropIfExists('user_logs');
}
}
