php - 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()
解决方案
您不能对关系使用与 DB 属性相同的名称。来自数据库的属性优先于方法(这个答案解释了如何搜索属性的值)。如果您有region
作为名称的属性,它将被用来代替 method 提供的属性/关系getRegion()
。Gii 足够聪明,可以用不同的名字生成关系——虽然名字region0
不是很好,但它可以工作。
在您的情况下,最好的方法是将region
列重命名为region_id
- 列名称变得更加清晰,并且您摆脱了关系名称和属性名称之间的名称冲突。
推荐阅读
- sql - 为什么 CONTAINS 和 LIKE 在 SQL 中不起作用?
- php - 在 PHP 中生成 Excel 文件后跳转到另一个页面
- vb.net - 我是 VB (Visual Studio) 的新手,我正在尝试从数据表“ClientInfo”中按升序获取列 (2)“LastName”
- javascript - 数组中的字符串行为异常 - Expo App
- php - PHP SQL 更新查询
- excel - 如何在 Excel VBA 中使用 LIKE 运算符突出显示子字符串
- computational-geometry - 体素化多边形网格
- c# - 如何使用 GeckoFx 浏览器检查网站是否具有有效的 SSL?
- excel - 根据另一列中的条件粘贴到一列
- ios - 一个应用程序可以在 Itunesconnect 中被同一团队 ID 中的另一个应用程序替换吗?