首页 > 解决方案 > Yii2 对象的属性

问题描述

在我的数据库中,我有:带文件的区域表

 -id
 -name

和花桌

 -id
 -name
 -region - this is ID from ragion table

在我的花卉模型中,我有方法

public function getRegion()
    {
        return $this->hasOne(Region::className(), ['id' => 'region']);
    }

现在当我尝试像这样使用它时

$flower->region->name

我有错误Trying to get property of non-object

$flower->region

返回区域ID。如何通过使用获取区域名称

$flower->region->name

?

更新:当我使用 gii 生成 Flower 模型时,我得到了这个方法:

public function getRegion0()
    {
        return $this->hasOne(Region::className(), ['id' => 'region']);
    }

我不明白。为什么我不能使用简单的 getRegion()

标签: phpactiverecordyii2

解决方案


您不能对关系使用与 DB 属性相同的名称。来自数据库的属性优先于方法(这个答案解释了如何搜索属性的值)。如果您有region作为名称的属性,它将被用来代替 method 提供的属性/关系getRegion()。Gii 足够聪明,可以用不同的名字生成关系——虽然名字region0不是很好,但它可以工作。

在您的情况下,最好的方法是将region列重命名为region_id- 列名称变得更加清晰,并且您摆脱了关系名称和属性名称之间的名称冲突。


推荐阅读