我所拥有的:
public function beforeValidate() {
$offender = Accounts::model()->find(array('select'=>'id','condition'=>'username=:username','params'=>array(':username'=>$this->offender)));
$informer = Accounts::model()->find(array('select'=>'id','condition'=>'username=:username','params'=>array(':username'=>$this->informer)));
$this->offender = $offender->id;
$this->informer = $informer->id;
return parent::beforeValidate();
}我得到的是:
PHP注意,这就是说,我正在尝试获取非对象$offender和$informer的属性“id”。
但这些都是100%的对象:
var_dump($offender):
目的(账户)46
var_dump($informer):
目的(账户)46
它实际上设置了正确的id,但是显示了通知。怎么啦?
解决了不能把它作为官方答复再张贴六个小时,所以我把它放在这里:
实际上,这个问题是在双beforeValidate()调用中发生的。
AbuseController.php:
if(isset($_POST['AbuseReport']))
{
$model->attributes=$_POST['AbuseReport'];
if($model->validate())
{
$model->save();
}
}第一次在$model->validate()上验证,用正确的ID替换$this->offender和$this->informer;第二次在$model->save();上验证,但是模型这次返回null,因为$this->offender已经是ID,但是它需要用户名。
整个解决方案就是禁用第二个验证:$model->save(false);。
发布于 2013-04-02 05:47:26
使用isset或is_object
if(isset($offender->id) || is_object($offender->id)){
$this->offender = $offender->id;
$this->informer = $informer->id;
}https://stackoverflow.com/questions/15703698
复制相似问题