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を設定しますが、とにかくその通知を示しています。なにが問題ですか?

解決済みあと6時間は公式の回答として投稿 できないので、ここに残します:

実際、問題は二重の beforeValidate() 呼び出しにありました。

AbuseController.php:

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

初めて で検証し、とを正しい ID$model->validate()に置き換えます。2 回目は で検証されますが、 は既に ID であるため、今回はモデルが返されますが、ユーザー名が必要です。$this->offender$this->informer$model->save();null$this->offender

これに対する全体的な解決策は、2 番目の検証を無効にすることです: $model->save(false);.

4

1 に答える 1