[英]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.