2

我有的:

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($罪犯):

对象(帐户)[46]

var_dump($informer):

对象(帐户)[46]

它实际上设置了正确的 id,但无论如何都会显示该通知。怎么了?

已解决 不能将其作为官方答案发布六个多小时,所以我把它留在这里:

实际上,问题出在双 beforeValidate() 调用中。

滥用控制器.php:

    if(isset($_POST['AbuseReport']))
    {
        $model->attributes=$_POST['AbuseReport'];
        if($model->validate())
        {
            $model->save();
        }
    }

它第一次验证,并用正确的 ID$model->validate()替换$this->offender和。$this->informer第二次验证$model->save();,但模型null这次返回,因为$this->offender已经是 ID,但它需要用户名。

对此的整个解决方案是禁用第二次验证:$model->save(false);.

4

1 回答 1

0

使用 isset 或 is_object

if(isset($offender->id) || is_object($offender->id)){
$this->offender = $offender->id;
$this->informer = $informer->id;
}
于 2013-04-02T05:47:26.430 回答