# 数据库migration的使用改造-字段
用到的类库
```php
use ClassLibrary\ClMigrateField;
```
回滚上次的数据库修改
```php
php think migrate:rollback
```
接着修改user migration 文档,新增一个name字段和密码
```php
<?php
use think\migration\Migrator;
use think\migration\db\Column;
use ClassLibrary\ClMigrateTable;
use ClassLibrary\ClMigrateField;
class User extends Migrator
{
public function up()
{
$table = 'user';
if($this->hasTable($table)){
return;
}
$this->table($table)
->setComment(
ClMigrateTable::instance()
->fetch('用户表')
)
->addColumn('name', 'string', ['default' => '', 'comment' =>
ClMigrateField::instance()
//必填
->verifyIsRequire()
//中文
->verifyChinese()
->fetch('名称')
])
->addColumn('password', 'string', ['default' => '', 'comment' =>
ClMigrateField::instance()
//必填
->verifyIsRequire()
//密码格式校验
->verifyIsPassword()
//存储为密码格式,且加密时加上'aaa'
->storageFormatPassword('aaa')
->fetch('密码')
])
->create();
}
public function down()
{
parent::down();
$table = 'user';
if($this->hasTable($table)){
$this->dropTable($table);
}
}
}
```
执行migrate
```php
php think migrate:run
```
此时的DDL
```sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '{"verifies":["is_required","chinese"],"name":"名称"}',
`password` varchar(255) NOT NULL DEFAULT '' COMMENT '{"verifies":["is_required",["password",6,18]],"store_format":["password","aaa"],"name":"密码"}',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='{"name":"用户表","create_api":["getList","get","create","delete","update"]}';
```
### ClMigrateField函数说明
函数名 | 注释
---|---
instance | 获取实例对象
fetch | 获取表Comment定义Json
invisible | 比如密码等敏感字段,接口输出的时候自动过滤掉
isReadOnly | 只读字段,不可修改
constValues | 定义字段静态变量,用int类型代替枚举类型,会自动在model中自动生成对应关系
showMapFields | 映射其他表字段,主键id自动映射,不需要关联查询
showFormat | 字段格式
storageFormatJson | 字段存储类型为json,会自动存储和解析
storageFormatPassword | 存储格式为密码,可设置salt,无需手工再md5等方式处理,解决了,多个地方判断密码正确性的问题
verifyIsRequire | 校验,必填字段
verifyIsPassword | 校验,密码格式
verifyInArray | 校验,在数组内
verifyIntInScope | 校验,在范围内
verifyIntMax | 校验,最大int值
verifyIntMin | 校验,最小int值
verifyStringLength | 校验,字符串长度
verifyStringLengthMax | 校验,最大字符串长度
verifyStringLengthMin | 校验,最小字符串长度
verifyEmail | 校验,email格式
verifyMobile | 校验,手机格式
verifyIp | 校验,ip
verifyPostcode | 校验,邮编
verifyIdCard | 校验,身份证
verifyChinese | 校验,汉字
verifyChineseAlpha | 校验,汉字+字母
verifyChineseAlphaNum | 校验,汉字+字母+数字
verifyChineseAlphaNumDash | 校验,汉字+字母+数字+下划线_+破折号-
verifyAlpha | 校验,字母
verifyAlphaNum | 校验,字母+数字
verifyAlphaNumDash | 校验,字母+数字+下划线_+破折号-
verifyUrl | 校验,网址
verifyNumber | 校验,数字
verifyArray | 校验,数组
verifyTel | 校验,固话
verifyIsDate | 校验,时间格式
verifyUnique | 校验,唯一值,比如身份证号、手机号等
### 自动完成字段
如果字段名称定义为create_time、update_time,程序会自动补充对应的值,会以timestamp时间戳方式填充。