如何在thinkphp5中集成migration # 背景 学习了laravel后,发现数据库原来也能和svn一样进行版本管理,这个简直太棒了,再也不用记事本记录表格变化的sql语句了。 如果已经用过laravel,了解migration就不用往下读了。 # 实现 官方集成文档 https://www.kancloud.cn/manual/thinkphp5/235127 官方还是一如既往的寥寥数语。虽然能集成了,但是还是要走些弯路自己摸索实现。 附上作者文档,虽然是英文的,但是还是比较清楚的。 http://docs.phinx.org/en/latest/ > 注意: 好像安装的时候不选择版本是自动下载2.0的,如果thinkphp的版本是5.1.0以下的会报错,5.1.0以下版本需要手动指定migration的版本号 `"topthink/think-migration": "^1.1.1",` 安装好后会在程序的根目录下生成database文件夹,里面就是您的数据库svn。 > 注意: 官网的数据库配置文件默认放置在application下,如果你有更改过配置文件的位置,则需要保留一份database.php的配置文件在application下。 接下来 生成一个表 php think migrate:create CreateAdminTable 修改一个表 php think migrate:create ModityAdminTable 运行示例 php think migrate:run 生成一个数据填充 php think seed:create AdminSeed 运行数据填充 php think seed:run 设计数据库字段 默认会生成自增长的int(11)的id字段,如果需要自定义 `$this->table('member', ['id' => false, 'primary_key' => ['user_id']]);` ```php table('member',array('engine'=>'Innodb')); $table->addColumn('user_name', 'string',array('limit' => 50,'comment'=>'用户名')) ->addColumn('password', 'string',array('limit' =>50,'default'=>md5('000000'),'comment'=>'用户密码')) ->addColumn('nick_name','string',array('limit' => 50,'null'=>true,'comment'=>'昵称')) ->addColumn('head_img','string',array('limit' => 50,'null'=>true,'comment'=>'头像')) ->addColumn('balance', 'decimal',array('precision' => 10,'scale'=>2,'comment'=>'余额')) ->addColumn('last_login_ip', 'integer',array('limit' => 11,'default'=>0,'comment'=>'最后登录IP')) ->addColumn('last_login_time', 'integer',array('limit' => 11,'default'=>0,'comment'=>'最后登录时间')) ->addColumn('is_lock','boolean',array('limit' => 4,'default'=>1,'comment'=>'1为正常2为锁定')) ->addColumn('remark','text',array('limit' => 0,'null'=>true,'comment'=>'text文本字段')) ->addTimestamps() ->addSoftDelete() ->create(); } } ``` 同理,数据填充 ```php public function run() { $data = [ [ 'user_name' => 'admin', 'nick_name' => '管理员', 'password' => md5('000000'), 'create_time' => date('Y-m-d H:i:s'), ] ]; $table = $this->table('member'); $table->insert($data)->save(); } ``` 建议和faker库一起使用,这个库能帮助生成大批量的模拟数据,包含生成随机姓名,随机数,随机电话,随机图片等等数据,模拟大数据的时候特别好用。 `"fzaninotto/faker": "^1.7"` 其他更多内容还是乖乖读作者文档吧