我有3个CActiveRecord
模型:
- 一个
- 乙
- C
关系:
- A有很多B。
- A有很多C。
- B属于A。
- C属于A。
在AController
's中,我正在从数据库actionHome($id)
中检索单行。A
就像默认的一样actionView($id)
。
在我的 View for 中,我还列出了属于 that的和的actionHome()
所有实例。B
C
A
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
视图文件。
label()
是我的A
模型类中的一个公共静态函数。
因此,由于我添加了急切加载,这会导致该功能不可用。
有人可以帮忙吗?
为什么这个功能不再可用?
label()
在我的视图中调用 home.php,如下所示:
$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()
(或将调用更改为A::label(2)
),那么下一行也会触发错误,..“名称”不是非对象的属性。
显然,由于某种原因,$a
不再是一个对象。
更新1:
因此,在我看来,将原因添加到 return ,所以我with()
试图findByPk($id)
找出原因。延迟加载没有这个问题。NULL
$a
NULL