我这样定义的.
array('PASSWORD', 'compare', 'compareAttribute'=>'PASSWORD2','message'=>'两次输入的密码不相同!', 'on'=>'register')
看了手册,我还是不知道里面的on=>register这个怎么定义才行.
现在注册和修改都要提示验证,但是我只需要注册的时候执行这个验证就可以了,修改的时候不执行此验证
请指教
谢谢
我这样定义的.
array('PASSWORD', 'compare', 'compareAttribute'=>'PASSWORD2','message'=>'两次输入的密码不相同!', 'on'=>'register')
看了手册,我还是不知道里面的on=>register这个怎么定义才行.
现在注册和修改都要提示验证,但是我只需要注册的时候执行这个验证就可以了,修改的时候不执行此验证
请指教
谢谢
把'on'=>'register'改成'on'=>'insert',或者在调用validate()的时候传入一个scenario参数(对1.0.1适用)指明是'register'。
很抱歉我的还是不行.用'on'=>'insert',修改的时候还是要验证
'on'=>'register'时$model->validate(null,'register'),也不行,不知道是不是这么用的.
因为我注册和修改都是用的同一个action,所以保存的时候是先$model->validate,然后再$model->save(false)的
再请教一个问题,就是表关联一对多的时候,has_many的时候
比如:
有三个表国家表,省份表,城市表.
has_many关联都建好了
知道国家的id,要一次性得到所有城市的时候该怎么用.
$mode[国家]->with(array('省'=>array('城市')))->findall($condition);
这样不行
查看手册.$mode[国家]->findbypk($condition);
$mode[国家]->省,这样取得省,但是还要取城市怎么取呢.$mode[国家]->省->城市,这样不行
验证问题:你的用法没错啊。你能把完整的rules()函数给出来么?另外把action里的代码也给出来?
第二个问题,代码参见如下:
Country::model()->with(array('province'=>'city'))->findAll($condition);
<?php public function rules() { return array( array('ACCOUNT_NAME', 'required', 'message'=>'请填写帐号!'), array('PASSWORD', 'compare', 'compareAttribute'=>'PASSWORD2','message'=>'两次输入的密码不相同!', 'on'=>'register') ); } //action部分代码 $Member->attributes = $_POST['Member']; if ($this->_register === true) { $Member->setAttribute('PASSWORD2', $_POST['Member']['PASSWORD2']); $validateType = "register"; } else { $validateType = null; } if ($Member->validate(null, $validateType)) { if ($Member->isNewRecord) { $Member->setAttribute('CREATED_DT', date('Y-m-d H:i:s')); } $Member->save(false); $this->redirect($successRedirect); ?>
另,刚才试了;has_many的查询,如果要分页怎么办.Country::model()->with(array('province'=>'city'))->findAll($condition);
这个条件limit出来的结果都是国家的.
你修改的时候的validationType应该是'update',而不是null。
如果需要对城市分页,只能通过lazy loading的办法了,因为SQL只能对join出来的结果进行limit。或者通过程序来控制分页。