簡體   English   中英

升級到Yii2,ORM不起作用

[英]Upgrading to Yii2, ORM not functional

我正在將一個大項目從Yii1升級到Yii2。 關於ORM,我遇到了一些問題。

我有幾種以以下方式聲明的關系(基本上是從guidebook復制粘貼):

class Order extends \yii\db\ActiveRecord {

/* other code */

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

每當我嘗試回顯或帶有$order->affiliate->name 我收到以下錯誤:

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

我還沒有使用Yii1的經驗。 關於這個項目的怪異之處是數據庫。 所有表yii_tablename開頭,並且id為: id_tablename Yii1正常嗎,這是否可能導致上述問題?

編輯 :當我執行這樣的功能: $order->getAffilate()它將返回一個ActiveQuery,而沒有來自會員的數據。

當我執行以下命令時:

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

我收到一個奇怪的錯誤:

Getting unknown property: app\models\Order::billing
return $this->hasOne(Affiliate::className(), ['id_affiliate' => 'affiliate_id']);

這意味着,當您調用$order->affiliate yii2時,將在id_affiliate字段的“ Affiliate表中找到當前Order affiliate_id值並選擇one值。

檢查您是否具有正確的字段名稱,並且數據庫具有正確的數據。

當您調用$order->affiliate您將獲得Affiliate對象。 但是,如果調用$order->getAffiliate() ,則將獲得ActiveQuery對象。

我找到了解決方案。 雖然我不是很喜歡,但是確實可以。 正在閱讀此線程: link

卡迪克五世

問題顯然是在命名關系和模型屬性時存在唯一性。 在用戶模型中,您有一個名為role的屬性,並且還有一個名為getRole的關系獲取器。

因此,我像這樣更改了吸氣劑的名稱:

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

這就解決了問題。 以前從未遇到過這個問題,想知道為什么會這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM