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

Yii2 function based on relation gives error on create

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

一切正常,直到我去创建。然后我得到以下 "error":

PHP Notice – yii\base\ErrorException Trying to get property of non-object

作为解决方法,我这样做了:

public function getDispName() {
    if (is_object($this->a)) {
        return $this->a->attr . ' ' . $this->attr . ' ' . $this->attr2;
    }
}

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

这个属性是基于其他属性的,所以当你新建一个类型A的对象时你不需要指明这个属性。仅指明它所来自的字段。

打开 /views/model_name/_form.php 并使用 属性 dispName

删除行
<?= $form->field($model, 'dispName')->textInput() ?> // or textarea or ...

您可能正在尝试使用未连接 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。它可以是空记录,但必须是记录。