2016-01-20 110 views
2

我正在將一個大項目Yii1升級到Yii2。我對ORM有一些問題。升級到Yii2,ORM不起作用

用以下方式(基本上是從guidebook複製粘貼),我有幾個關係宣稱:

class Order extends \yii\db\ActiveRecord { 

/* other code */ 

public function getAffiliate() 
{ 
    return $this->hasOne(Affiliate::className(), ['id_affiliate' => 'affiliate_id']); 
} 

每當我試着回聲或W/E $order->affiliate->name;我得到以下錯誤:

yii\base\ErrorException: Trying to get property of non-object 

我沒有Yii1的經驗,所以曾經。這個項目很奇怪的是數據庫。所有表格以yii_tablename開頭,編號爲:id_tablename。對Yii1來說這是否正常,這可能導致上述問題?

編輯:當我執行如下功能:$order->getAffilate()它返回一個ActiveQuery,而不是來自會員的數據。

當我執行以下命令:

$order->getBillingAddress()->one(); 

我得到一個奇怪的錯誤:

Getting unknown property: app\models\Order::billing 

回答

0

我找到了解決方案。其中一個我雖然不是很喜歡,但它能完成這項工作。當時正在閱讀此主題:link

Kartik V

The problem is clearly in uniqueness in naming your relation and your model attribute. In your User model, you have an attribute named role and you also have a relation getter named getRole.

所以我改了名字的吸氣劑,像這樣:

public function getOrderAffiliate() 
{ 
    return $this->hasOne(Affiliate::className(), ['id_affiliate' => 'affiliate_id']); 
} 

這固定的問題。之前從未有過這個問題,並想知道爲什麼會這樣。

0
return $this->hasOne(Affiliate::className(), ['id_affiliate' => 'affiliate_id']); 

它的意思是,當你調用$order->affiliate yii2會發現在Affiliate表上id_affiliate勵磁電流Orderaffiliate_id值和選定的one值。

檢查您是否擁有正確的字段名稱和數據庫是否有正確的數據。

當您撥打$order->affiliate時,您將收到Affiliate對象。但是如果您撥打$order->getAffiliate(),您將收到ActiveQuery對象。

+1

剛剛添加的信息,返回activeQuery顯示正確的數據,謝謝 – Wijnand

+0

對不起,我再看看活躍查詢的數據,它返回的數據,但沒有從會員。這對我來說太蠢了。 – Wijnand

+0

檢查'Affiliate'表中是否存在'id_affiliate'。和'Order'中的'affiliate_id'。接下來檢查ID是否正確。 API你的代碼是正確的。 –