对象的Yii2属性

Rob*_*1on 0 php activerecord yii2

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

 -id
 -name
Run Code Online (Sandbox Code Playgroud)

和花桌

 -id
 -name
 -region - this is ID from ragion table
Run Code Online (Sandbox Code Playgroud)

在我的Flower模型中我有方法

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

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

$flower->region->name
Run Code Online (Sandbox Code Playgroud)

我收到了错误 Trying to get property of non-object

$flower->region
Run Code Online (Sandbox Code Playgroud)

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

$flower->region->name
Run Code Online (Sandbox Code Playgroud)

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

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

我不懂.为什么我不能使用简单的getRegion()

rob*_*006 5

您不能对关系使用与DB属性相同的名称.数据库中的属性优先于方法(此答案解释了如何搜索属性的值).如果您将属性region作为名称,则将使用它而不是方法提供的属性/关系getRegion().Gii足够聪明,可以产生不同名称的关系 - 虽然名字region0不是很好,但它确实有用.

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