之前在用Laravel写项目的时候发现数据库迁移和数据填充很好用,由于新的项目需要使用TP5.1框架开发,所以打算在TP也使用这种方式管理数据,通过查找资料整理了一下使用方法。
由于think-migration最新版本需要TP6.0框架,所以在TP5.1下安装需要指定2.0.*版本
composer require topthink/think-migration=2.0.*
安装好之后在控制台输入命令查看如否有一下命令
php think
创建迁移类,首字母必须为大写
php migrate:create Users
首次生成会有如下提示
输入 ‘y’ 或者 ‘yes’
成功生成了一个迁移类,打开后可以看到有一个默认的 change 方法
在change方法内编写如下代码:
public function change {
// 创建表第一个参数为表名
$table = $this->table('users',array('engine'=>'InnoDB'));
// 添加字段 limit->字段的长度 defalut->字段的默认值 comment-> 字段备注 null -> 默认为false,字段不能为空,设置为true 可以让字段为空
$table->addColumn('username', 'string',array('limit' => 100,'default'=>'','comment'=>'用户名'))
->addColumn('password', 'string',array('limit' => 32,'default'=>md5('123456'),'comment'=>'用户密码'))
->addColumn('phone','string',array('limit' => 11,'comment' => '电话','null' => true))
->addColumn('email','string',array('limit' => 32,'default'=>'','comment' => '邮箱','null' => true))
->addColumn('avatar','string',array('limit' => 32,'default'=>'','comment' => '头像','null' => true)) //
->addColumn('status','integer',array('limit' => 2,'default'=>0,'comment' => '账户状态 0-正常 1-已禁用'))
->addColumn('is_delete', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'删除状态,1已删除'))
// 添加唯一索引
->addIndex(array('username'), array('unique' => true))
// 添加 create_time 与 update_time 两个字段
->addTimestamps()
->create();
}
由于TP官方文档这部分写的很简洁,有些用法并未写出,这里可以参考phinx 的文档来使用
phinx官方文档
phinx中文文档
change方法编写完成后在控制台输入以下命令,即可自动创建数据表
php think migrate:run
查看自动创建的表
如果数据表创建的有误或者需要新增、修改、删除字段,可以使用php think migrate:rollback
命令回滚,修改完之后再次执行 php think migrate:run
即可
我们在创建完数据表格后往往需要做一些假数据,在TP中我们可以通过composer来安装这个拓展库
在命令行输入以下命令
composer require fzaninotto/faker
在命令行输入以下命令
php think seed:create UserSeeder
首次创建seed文件会有以下提示
输入 ‘y’ 或者 'yes‘
成功生成seed文件
打开生成的seed文件,在run方法里面编写逻辑
public function run()
{
// faker默认语言是英文会生成英文的数据,在创建实例的时候可以指定为中文
$faker = Faker\Factory::create('zh_CN');
$data = [];
// 循环生成50条数据
for ($i = 0; $i < 50; $i++) {
$data[] = [
'username' => $faker->name,
'password' => md5($faker->password),
'phone' => $faker->phoneNumber,
];
}
// 将输入插入users表中
$this->insert('users', $data);
}
在命令行输入以下命令并执行
php think seed:run