[英]Fatal error in Yii immediately after adding eager-loading
我有3個CActiveRecord
模型:
關系:
在AController
的actionHome($id)
,我從數據庫中檢索A
的單行。 就像默認的actionView($id)
。
在我的actionHome()
視圖中,我還列出了屬於該A
的B
和C
所有實例。
public function actionHome($id)
{
$this->render('home', array('a' => A::model()->findByPk($id)));
}
在actionHome()
,我想使用A
的關系的actionHome()
加載 。
但是,當我將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
視圖文件中Fatal error: Call to a member function label() on a non-object in
。
label()
是我在A
模型類中擁有的公共靜態函數。
因此,由於我添加了緊急加載,因此導致該功能不可用。
有人可以幫忙嗎?
為什么此功能不再可用?
在我的home.php視圖中, 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()
的調用注釋掉(或將調用更改為A::label(2)
),那么下一行也將觸發錯誤,..“ name”不是的屬性非對象。
顯然,由於某種原因, $a
不再是對象。
更新1:
添加with()
導致findByPk($id)
返回NULL
,因此$a
在我看來是NULL
,因此我試圖找出原因。 延遲加載沒有此問題。
因為關系cs
為空,所以findByPk()
返回NULL
。 Yii正在執行從A
到B
的INNER JOIN
,因為沒有B
屬於A
,所以結果集為空。
延遲加載不存在此問題,因為它直到需要B
數據才進行查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.