我的模型叫做B:
public function getA() {
return $this->hasOne(\app\models\A::className(), ['id' => 'A_Id']);
}
public function getDispName() {
return $this->a->attr . ' ' . $this->attr . ' ' . $this->attr2;
}
一切正常,直到我去创建。然后我得到以下"错误" :
PHP注意 - yii \ base \ ErrorException试图获取非对象的属性
作为解决方法,我已经这样做了:
public function getDispName() {
if (is_object($this->a)) {
return $this->a->attr . ' ' . $this->attr . ' ' . $this->attr2;
}
}
我不确定这是不是一个好的解决方案,或者为什么我只在创建时才会看到"通知" ,但我想了解并做它正确。我不希望这会在其他地方引发问题。也许我会错过其他一些基本和重要的知识。如果您有任何想法,我将很高兴听到它。感谢。
答案 0 :(得分:1)
您可能正在尝试使用未附加A模型的B模型。如果是这种情况,你的功能当然会失败。你确定每个B你有A吗?您可能正在插入B而不是插入A并尝试在其上显示信息。
您的选择是:
1)完全按照你的方式做,也许改成
public function getDispName() {
$display = '';
if (is_object($this->a)) {
$display = $this->a->attr;
}
return $display . ' ' . $this->attr . ' ' . $this->attr2;
}
2)修复你的代码,以便在插入B时始终确保插入A.它可以是空记录,但必须是记录。
答案 1 :(得分:0)
此属性基于其他属性,因此当您创建A类型的新对象时,您不需要指明此属性。仅指出它所包含的字段。
打开/views/model_name/_form.php
并删除包含属性dispName
<?= $form->field($model, 'dispName')->textInput() ?> // or textarea or ...