基于关系的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;
}

一切正常,直到我转到创建。然后我得到以下"错误">

PHP通知–yii''base''ErrorException试图获取非对象的属性

作为一种变通方法,我已经这样做了:

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

我不确定这是否是一个好的解决方案,也不确定为什么我只在创建时收到这个"通知">,但我想理解并正确地执行它。我不希望这会给其他地方带来问题。也许我错过了其他一些基本而重要的知识。如果你有什么想法,我会很高兴听到的。谢谢。

您可能正在尝试使用一个没有附加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。它可以是空记录,但必须是记录。

此属性基于其他属性,因此当您创建类型为A的新对象时,不需要指示此属性。仅指示它所包含的字段。

打开/views/model_name/_form.php并删除具有属性dispName 的行

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