数据表:user;字段名:id,user_name,pwd,email,grade,create_time;id 自增,主键。
创建一个UserModel对象的时候,ThinkPHP会自动的生这个对象的User.PHP文件,位于Runtime/Data/_fields/User.php
内容如下:
return array (
0 => 'id',
1 => 'user_name',
2 => 'pwd',
3 => 'email',
4 => 'grade',
5 => 'create_time',
'_autoinc' => true,
'_pk' => 'id',
);
?>
如果这时你再在user表里增加一个字段 如status,
要自动填充的值为
protected $_auto=array(
array('grade','1'),
array('create_time','mytime',1,'callback'),
array('status','1'),
);
public function mytime(){
return date("Y-m-d H:i:s");
}
那么status字段就不能自动填充了,因为User.php文件不会自动把新增的字段加到文件里。
解决办法1:把status字段手动加到User.php文件里
return array (
0 => 'id',
1 => 'user_name',
2 => 'pwd',
3 => 'email',
4 => 'grade',
5 => 'create_time',
6=>'status',
'_autoinc' => true,
'_pk' => 'id',
);
?>
2。把User.php删除。。不建义这样做。。
自动完成
在Model类定义 $_auto 属性,可以完成数据自动处理功能,用来处理默认值、数据过滤以及其他系统写入字段。$_auto属性是由多个填充因子组成的数组,填充因子定义格式:
array(填充字段,填充内容,填充条件,附加规则)
填充字段就是需要进行处理的表单字段,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。
填充条件包括:
Model:: MODEL_INSERT 或者1 新增数据的时候处理(默认)
Model:: MODEL_UPDATE 或者2更新数据的时候处理
Model:: MODEL_BOTH 或者3所有情况都进行处理
附加规则包括:
function :使用函数,表示填充的内容是一个函数名
callback :回调方法 ,表示填充的内容是一个当前模型的方法
field :用其它字段填充,表示填充的内容是一个其他字段的值
string :字符串(默认方式)
示例:
protected $_auto = array (
array('status','1'), // 新增的时候把status字段设置为1
array('password','md5',1,'function') , // 对password字段在新增的时候使md5函数处理
array('name','getName',1,'callback'), // 对name字段在新增的时候回调getName方法
array('create_time','time',2,’function’), // 对create_time字段在更新的时候写入当前时间戳
);
使用自动填充可能会覆盖表单提交项目。其目的是为了防止表单非法提交字段。使用Model类的create方法创建数据对象的时候会自动进行表单数据处理。
和自动验证一样,自动完成机制需要使用create方法才能生效。并且,也可以在操作方法中动态的更改自动完成的规则。
$auto = array (
array('password','md5',1,'function') // 对password字段在新增的时候使md5函数处理
);
$User-> setProperty("_auto",$auto);
$User->create();