在我的数据库中,我有: 带有文件的区域表
-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()
答案 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
-列名变得更清晰,并且摆脱了关系名和属性名之间的名称冲突。