【问题标题】:Upgrading to Yii2, ORM not functional升级到 Yii2,ORM 不起作用
【发布时间】:2016-01-20 14:32:51
【问题描述】:

我正在将一个大型项目从 Yii1 升级到 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 为:id_tablename。 Yii1 是否正常,是否会导致上述问题?

编辑:当我像这样执行函数时:$order->getAffilate() 它返回一个 ActiveQuery,没有来自附属公司的数据。

当我执行以下操作时:

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

我收到一个奇怪的错误:

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

【问题讨论】:

    标签: php activerecord yii orm yii2


    【解决方案1】:
    return $this->hasOne(Affiliate::className(), ['id_affiliate' => 'affiliate_id']);
    

    这意味着当你调用$order->affiliate yii2 会在Affiliate 表中找到id_affiliate 字段当前Orderaffiliate_id 值并选择one 值。

    检查您的字段名称是否正确,数据库是否有正确的数据。

    当您调用$order->affiliate 时,您将获得Affiliate 对象。但是如果你调用$order->getAffiliate() 你会得到ActiveQuery 对象。

    【讨论】:

    • 刚刚添加了返回的activeQuery显示正确数据的信息,谢谢
    • 抱歉,我再次查看了活动查询中的数据,它返回数据,但没有来自附属公司。那是我的愚蠢..
    • 检查id_affiliate 是否存在于Affiliate 表中。和affiliate_id 中的Order。接下来检查 ids 是否正确。 API 你的代码是对的。
    • OrderAffiliate 都存在于数据库中。直接来自Order 的所有数据都会毫无问题地显示在页面上。
    【解决方案2】:

    我找到了解决方案。一个我不是很喜欢的,但它可以完成工作。正在阅读此主题:link

    Kartik V

    问题显然在于命名关系和模型属性的唯一性。在您的 User 模型中,您有一个名为 role 的属性,还有一个名为 getRole 的关系 getter。

    所以我像这样更改了 getter 的名称:

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

    这就解决了问题。以前从未遇到过这个问题,但想知道为什么会这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2015-04-09
      • 2012-06-24
      • 1970-01-01
      相关资源
      最近更新 更多