2015-07-05 106 views
0

我有這個在我的模型稱爲B錯誤:Yii2功能使上創建

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的通知 - 警予\基地\ ErrorException試圖讓非對象

的財產作爲一種變通方法我已經做到了這一點:

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

我不確定這是否是一個好的解決方案,或者爲什麼我只在創建時纔會得到這個「通知」,但我想正確理解並執行該操作。我不希望這會在其他地方造成問題。也許我會錯過其他基本和重要的知識。如果你有任何想法,我會很感激聽到它。謝謝。

回答

1

你可能嘗試使用沒有一個模型連接一個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.它可以是一個空記錄,但它必須是一個記錄。

0

此屬性基於其他屬性,因此當您創建A類型的新對象時,不需要指示此屬性。僅指示它所包含的字段。

打開/views/model_name/_form.php和刪除行與財產dispName

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