2012-12-17 55 views
1

我打電話給findAll方法,我得到4個字段。現在我想添加一個名爲$owned的字段。這意味着我從表中獲得記錄後,生成的數據記錄應包含擁有的字段。 另外,$owned字段根據用戶是否爲組的所有者而動態。我嘗試使用afterFind。但它也不起作用。令人驚訝的是,它將$owned歸於對象,但不歸屬於屬性。 我在控制器中使用CJSON::encode($model)查看輸出。$owned字段未顯示。下面 是代碼在YII框架中的findAll調用後將屬性添加到activerecord

/** 
* 
* The followings are the available columns in table 'group': 
* @property integer $id 
* @property string $name 
* @property string $created_at 
* @property string $updated_at 
*/ 

class Group extends CActiveRecord 
{ 
//adding owned property for groups.true if user is owner 

    public $owned; 

protected function afterFind() 
{ 

    parent::afterFind(); 
    //if user is owner of group its true 
    $this->owned = true; 

} 
+0

你可以發佈你的整個'Group'模型在你的問題?你是否已經通過在'rules()'方法中聲明'owned'來定義屬性? – Stu

+0

你可以嘗試在賦值後調用'parent :: afterFind()'(不知道它會改變什麼,但你可以試試看) – darkheir

回答

0

終於讓我找到了。這是CJSON ::編碼問題。此方法僅編碼模型的屬性。它不編碼任何關係或動態屬性。所以我寫了我自己的功能,它的工作原理。

希望這可以幫助別人在未來

感謝所有 史密斯

0

試試下面的代碼:

public function init() 
    { 
     $this->onAfterFind=array($this,'afterFindCustom'); 
     parent::init(); 
    } 

    public function afterFindCustom() 
    { 
     $this->owned = true; 
     parent::afterFind(); 
    } 
+0

謝謝Sarvesh。我得到了錯誤「(!)致命錯誤:達到'100'的最大函數嵌套級別,正在放棄!放在C:\ wamp \ yii-1.1.12.b600af \ framework \ collections \ CListIterator.php第91行。 afterFindCustom中的行parent :: afterFind()導致此錯誤。 – user1388835

+0

是的,您必須從afterFindCustom()中移除parent :: afterFind()調用。 onAfterFind事件由afterFind函數觸發,因此再次調用它意味着您正在創建一個無限循環。無需返回任何東西或在那裏調用父功能。 – Blizz

+0

謝謝Blizz ...仍然無法正常工作..在我的代碼$ groups = Tabs :: model() - > findAll('user_id =:userID',array(':userID'=> $ userID));.在獲取之後,有什麼辦法可以將任何附加屬性添加到$ groups對象數組中。因爲我無法添加任何東西。在做print_r的時候,它會把我的整個對象都轉換成許多屬性和所有... – user1388835

相關問題