# 数据库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时间戳方式填充。