簡體   English   中英

添加渴望加載后,Yii中立即出現致命錯誤

[英]Fatal error in Yii immediately after adding eager-loading

我有3個CActiveRecord模型:

  • 一種
  • C

關系:

  • A有很多B。
  • A有很多C
  • B屬於A。
  • C屬於A。

AControlleractionHome($id) ,我從數據庫中檢索A的單行。 就像默認的actionView($id)

在我的actionHome()視圖中,我還列出了屬於該ABC所有實例。

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正在執行從ABINNER JOIN ,因為沒有B屬於A ,所以結果集為空。

延遲加載不存在此問題,因為它直到需要B數據才進行查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM