thinkphp5系列之数据库迁移工具(轻松的修改跟共享数据库结构)

发布时间:1970-01-01  编辑:Mrs.默先森 

    migration:一种数据库的版本控制,让团队在修改数据库结构的同时,保持彼此的进度一致。帮你更简单的管理数据库。基于原生 thinkPHP 5.0 命令行工具,融入了 Phinx 的数据库迁移;查看  Phinx文档获取更多帮助...


    首先通过 composer 安装

    composer require topthink/think-migration

    在命令行下运行查看帮助,可以看到新增的命令

    php think
     migrate
      migrate:breakpoint  Manage breakpoints
      migrate:create      Create a new migration
      migrate:rollback    Rollback the last or to a specific migration
      migrate:run         Migrate the database
      migrate:status      Show migration status
     seed
      seed:create         Create a new database seeder
      seed:run            Run database seeders

    常用命令

    查看可用命令

    php think list

    创建数据库迁移文件

    php think migrate:create CreateUserTable

    执行数据库迁移文件

    php think migrate:run

    返回到最近一次的migrate操作

    php think migrate:rollback

    thinkphp5数据迁移

    • 创建数据库迁移文件【创建迁移类,首字母必须为大写


    php think migrate:create CreateUserTable

    1499787174218058.png

    第一次执行的时候会确认是否创建迁移目录;

    确认之后;

    这时会在项目根目录下执行的该命令;

    那么在项目跟目录下会看到database/migrations/20170711153001_create_user_table.php;

    默认有一个change方法


    如果你的迁移脚本只会有一下操作

    • createTable(创建表)

    • renameTable(重命名表)

    • addColumn(添加字段)

    • renameColumn(重命名字段)

    • addIndex(添加索引)

    • addForeignKey(添加外键)

    那么你只需要change方法就可以了,回滚的时候可以自动根据change里的操作来逆向操作,否则需要定义up和down两个方法,来标识迁移和回滚两个具体操作

    定义了up和down方法后就不要再定义change方法了;

    在change方法里操作数据表的时候,只能用create()或者是update()来完成;

    而不能用save();

    创建数据表

    创建数据表使用create方法,并调用addColumn方法进行数据字段定义

    public function change()
    {
       $table = $this->table('user',array('engine'=>'MyISAM'));
       $table->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
          ->addColumn('password', 'string',array('limit' => 32,'default'=>md5('123456'),'comment'=>'用户密码'))
          ->addColumn('login_status', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'登陆状态'))
          ->addColumn('login_code', 'string',array('limit' => 32,'default'=>0,'comment'=>'排他性登陆标识'))
          ->addColumn('last_login_ip', 'integer',array('limit' => 11,'default'=>0,'comment'=>'最后登录IP'))
          ->addColumn('last_login_time', 'datetime',array('default'=>0,'comment'=>'最后登录时间'))
          ->addColumn('is_delete', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'删除状态,1已删除'))
          ->addTimestamps()//默认生成create_time和update_time两个字段
          ->addIndex(array('username'), array('unique' => true))
          ->create();
    }

    生成的数据表结构如下:1499789728205003.png

    默认会自动添加一个id自增主键

    如果需要自定义设置主键自增,可如下修改:

    public function change()
    {
        $table = $this->table('user',array('engine'=>'MyISAM'));
        $table->setId('user_id')->setPrimaryKey('user_id') 
           ->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
           ->create();
    }

    如果不需要主键自增,可以如下:

    public function change()
    {
        $table = $this->table('user',array('engine'=>'MyISAM'));
        $table->setId(false)->setPrimaryKey('user_id')
           ->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
           ->create();
    }

    或者使用up和down

    public function up ()
    {
       $table = $this->table('user',array('engine'=>'MyISAM'));
       $table->setId('user_id') //关闭自动设置主键
          ->setPrimaryKey('user_id') //设置主键
          ->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
          ->create();
    }
    
    public function down ()
    {
       $this->dropTable('user');
    }

    执行迁移

    php think migrate:run

    执行回滚

    php think migrate:rollback
    #回滚所有
    php think migrate:rollback -t 0

    重命名和删除数据表

    $this->table('user')->rename('user_rename');                 #重命名
    $this->table('user')->drop();/$this->dropTable('user');     #删除

    标签php nginx Linux


本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。

陶太富博客 http://blog.taotaifu.cn

最新发布

最新评论

0.072898s