对象的{yii2}属性

时间:2018-08-10 20:44:04

标签: php activerecord yii2

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

 -id
 -name

和花桌

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

在我的Flower模型中,我有方法

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()

1 个答案:

答案 0 :(得分:5)

关系的名称不能与数据库属性的名称相同。数据库中的属性优先于方法(this answer解释了如何搜索属性值)。如果您具有名称为const createInput = name => { const stepInput = document.createElement(`input`); const isPassword = name.lowerCase() === `password`; stepInput.name = name.toLowerCase(); stepInput.className = `input`; stepInput.placeholder = name; stepInput.autocomplete = `off`; if(isPassword){ stepInput.type = `password`; } return stepInput; } const submitButton = () => { const submitButton = document.createElement(`input`); submitButton.className = `login`; submitButton.type= `submit`; submitButton.value= `Login`; return submitButton; } const createForm = (dataList) => { const form = document.createElement(`form`); form.action = `php/login.php`; form.method = `post`; const fragment = new DocumentFragment(); dataList.forEach(data => { fragment.appendChild(createInput(data)); fragment.appendChild(document.createElement(`br`)); } fragment.appendChild(submitButton()); form.appendChild(fragment); return form; } const directions = document.createElement(`div`); directions.className = `directions`; directions.appendChild(createForm(data)); nextStep.appendChild(directions); 的属性,将使用它代替方法region提供的属性/关系。 Gii非常聪明,可以使用不同的名称生成关系-尽管getRegion()并不是很好的名字,但它可以工作。

对于您而言,最好的方法是将region0列重命名为region-列名变得更清晰,并且摆脱了关系名和属性名之间的名称冲突。