私が持っているもの:
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);
.