验证问题

我这样定义的.

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。或者通过程序来控制分页。