基于关系的Yii2函数在创建时给出错误

时间:2015-07-05 23:49:36

标签: php exception yii2 relation notice

我的模型叫做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;
    }
}

我不确定这是不是一个好的解决方案,或者为什么我只在创建时才会看到"通知" ,但我想了解并做它正确。我不希望这会在其他地方引发问题。也许我会错过其他一些基本和重要的知识。如果您有任何想法,我将很高兴听到它。感谢。

2 个答案:

答案 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 ...