这是我在模型中的关系
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'user_id']);
}
public function getTaskCreatedBy()
{
return $this->hasOne(User::className(), ['id' => 'taskCreatedBy']);
}
现在我想使用taskcreatedby
并获得我这样做的用户fullname
:
Created By:<?php echo $model->taskCreatedBy->fullname?>
但是,我收到错误说:试图获得非对象的属性
答案 0 :(得分:2)
检查真实的列名可能是你的db列名不是taskCreatedBy但有些不同,例如:(或其他列名)
public function getTaskCreatedBy()
{
return $this->hasOne(User::className(), ['id' => 'task_created_by']);
}
答案 1 :(得分:0)
所以你有2个关系连接到这个模型/表。 1. User表连接到此模型中的user_id字段/数据库列。 2. TaskCreatedBy表连接到此模型中的taskCreatedBy字段。
这个型号的表名是什么?在tableName函数中找到。
public static function tableName()
{
return '???????????????';
}
了解以下代码:
['id' => 'taskCreatedBy']
可归纳如下:
['fieldname在外国模型表中称为'id',名为TaskCreatedBy'=&gt; 'fieldname在当前模型表中称为taskCreatedBy'即。当前模型表中的外键字段/数据库列的名称...您未提供给我们的此模型/文件/表的名称]
验证'taskCreatedBy',如上面的代码片段,是当前模型表中字段的实际名称,即。属于上述代码所在文件的表。
我会简化您的表名,以避免在必须输入关系代码时出现大写和小写问题
<?php echo $model->taskCreatedBy->fullname?>
并且也不使用像taskCreatedBy这样的字段/数据库列,它与表名TaskCreatedBy非常相似。我的建议是你将表TaskCreatedBy中的字段taskCreatedBy重命名为taskcreatedby_id。
在上面的代码片段中
['id' => 'taskCreatedBy']
taskCreatedBy应该是小写的,并且对应于当前模型/表中存在的实际字段/数据库列名,最好是taskcreatedby_id。