我有3个CActiveRecord
型号:
关系:
在AController
的{{1}}中,我正在从数据库中检索actionHome($id)
的单行。就像默认的A
。
在我的actionView($id)
视图中,我还列出了属于actionHome()
的{{1}}和B
的所有实例。
C
在A
中,我想使用{strong>急切加载的public function actionHome($id)
{
$this->render('home', array('a' => A::model()->findByPk($id)));
}
关系。
但是,当我向actionHome()
函数添加A
时,我立即收到致命错误。
with()
findByPk()
我的public function actionHome($id)
{
$this->render('home', array('a' => A::model()->with('bs','cs')->findByPk($id)));
}
查看文件。
Fatal error: Call to a member function label() on a non-object in
是我在home.php
模型类中的公共静态函数。
因此,由于我添加了预先加载,这会导致该功能无法使用。
有人可以协助吗? 为什么这个功能不再可用?
在我的视图home.php中调用 label()
,如下所示:
A
label()
在我的模型中定义如下:
$this->breadcrumbs = array(
CHtml::encode($a->label(2)) => array('index'),
CHtml::encode($a->name),
);
如果我在视图中注释掉label()
的调用(或将调用更改为public static function label($n = 1)
{
if ( $n == 0 ) $n = 1;
return Yii::t('app', 'A|As', $n);
}
),则下一行也会触发错误,但“名称”不是非对象的属性。
显然,由于某种原因,label()
不再是对象。
更新1:
添加A::label(2)
会导致$a
返回with()
,因此我的视图中findByPk($id)
为NULL
,所以我试图找到原因。延迟加载没有此问题。
答案 0 :(得分:1)
findByPk()
正在返回NULL
,因为关系cs
为空。 Yii正在从INNER JOIN
到A
执行B
,因为没有B
属于A
,结果集为空。
延迟加载没有此问题,因为在需要B
的数据之前,它不会执行查询。