php数据迁移刷新,thinkphp5.1中的数据库迁移和数据填充

总结

数据库迁移类似于数据库的SVN,可方便用于团队开发工程中的系统应用数据结构初始化、新建或删除表、新增或修改表字段等操作。

Thinkphp提供了think-migration扩展用户数据库的迁移和数据填充

数据库迁移

1. 安装和创建迁移类

$ composer require topthink/think-migration=2.0.*

复制代码$ php think migrate:create Third

复制代码

表名称首字母需大写,如下图:

798327da60d967ae47b0daaea4260030.png

系统会自动生成迁移类文件:

73367b56b32e011bc62beed8fdb4328e.png

2. 编辑操作方法

use think\migration\Migrator;

use think\migration\db\Column;

use Phinx\Db\Adapter\MysqlAdapter; //如创建MYSQL特有字段,需导入该命名空间

class Test extends Migrator

{

public function change()

{

$table = $this->table('third', ['engine' => 'InnoDB', 'collation' => 'utf8_bin', 'comment' => '测试表']);

$table->addColumn('member_id', 'integer', ['limit' => 10, 'signed' => false, 'default' => '0', 'comment' => 'MYSQL:int'])//unsigned:('signed' => false)

->addColumn('thirdid', 'integer', ['limit' => MysqlAdapter::INT_TINY, 'signed' => false, 'default' => '0', 'comment' => 'MYSQL:tinyint'])//需导入命名空间

->addColumn('platform', 'string', ['limit' => 30, 'default' => '', 'comment' => 'MYSQL:varchar'])

->addColumn('fee', 'decimal', ['precision' => 10, 'scale' => 2, 'default' => '0', 'comment' => 'decimal'])//decimal(10,2):('precision' => 10, 'scale' => 2)

->addColumn('money', 'float', ['precision' => 10, 'scale' => 2, 'default' => '0', 'comment' => 'float'])

->addColumn('openid', 'text', ['default' => '', 'comment' => 'text'])

->addColumn('content', 'text', ['limit' => MysqlAdapter::TEXT_LONG, 'default' => '', 'comment' => 'MYSQL:longtext'])

->addColumn('is_show', 'enum', ['values' => ['false', 'ture'], 'default' => 'false', 'comment' => 'enum'])

->addColumn('delete_time', 'integer', ['limit' => 10, 'signed' => false, 'null' => true, 'default' => NULL, 'comment' => 'delete_time'])//null:('null' => true)

->addIndex(['member_id'], ['name' => 'member_id'])

->addIndex(['thirdid', 'member_id'], ['unique' => true, 'name' => 'thirdid'])

->create();

$rows = [ //插入数据

[

'member_id' => 1,

'platform' => 'zhifubao',

],

[

'member_id' => 2,

'platform' => 'weixin',

],

];

$table->insert($rows)->save();

}

}

复制代码

或使用up和down方法,但使用change方法后,up和down方法将被忽略:

Please be aware that when a change method exists, Phinx will automatically ignore the up and down methods

public function up()

{

// add column type DOUBLE

$this->execute("ALTER TABLE zxcms_test ADD COLUMN much_money DOUBLE(10,2) unsigned NOT NULL DEFAULT '0.00'");

}

public function down()

{

$this->dropTable('third');

}

复制代码

3. 执行操作

$ php think migrate:run

复制代码

结果如下:

9464faa89ce83fdc5799bae5a0d77adc.png

同时数据库中会生成third表和migrations表,migrations表用于记录本次操作的记录:

d915e895df5137a1aa41998bfb0ee673.png

4. 更新数据

再次创建migrate:

$ php think migrate:create ChangeThird

复制代码

再将需要更新的内容写到change方法中

public function change()

{

$table = $this->table('third');

$table->changeColumn('platform', 'string', ['limit' => 255])

->addColumn('password', 'string', array('after' => 'platform','limit' => 32, 'default' => md5('123456'), 'comment' => '用户密码'))

->save();

}

复制代码

再次执行操作:

ad7421f4e8c8f189faf0f888e8c89481.png

5. 执行回滚

up与down方法提供 migrate:run 和migrate:rollback功能,可通过以下命令回滚down中的操作

$ php think migrate:rollback -t third

复制代码

third类文件中的down方法:

public function down()

{

$this->dropTable('third');

}

复制代码

结果如下:

6271610960779f56aba1b24745d4e4d0.png

third表被删除:

9bede7e1ac3798d0a69fddeaf5989b77.png

数据填充

1. 创建seed

$ php think seed:create Third

复制代码

如下:

0bd1e26e7b4d1dac3a9932aa392fc478.png

可看到生成的文件:

73430d41a9bc163439a6e5e4b4909e6b.png

2. 编辑seed文件:

public function run()

{

$data[] = [

'member_id' => 1,

'thirdid' => '1',

'platform' => 'zhansan',

];

$this->table('third')->insert($data)->save();

}

复制代码

3. 开始进行数据库填充

$ php think seed:run

复制代码

结果如下:

b00e61a82d376d6dd00427125ff34a46.png

可指定一个或多个seed

$ php think seed:run -s Third

$ php think seed:run -s Third -s member

复制代码

使用假数据生成器

安装faker类库

$ composer require fzaninotto/faker

复制代码

使用faker生成数据

public function run()

{

$faker = Faker\Factory::create('zh_CN');//选择中文库

$data = [];

for ($i = 0; $i < 100; $i++) {

$data[] = [

'member_id' => $faker->randomDigit,

'thirdid' => $faker->randomDigit,

'platform' => $faker->word,

'openid' => sha1($faker->password),

'content' => $faker->realText(50),

];

}

$this->table('third')->insert($data)->save();

}

复制代码

结果如下:

b1961dd0815440e1bea77f94f73a9ec9.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值