指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

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