2012-05-02 76 views
0

我試圖在模型中設置一個字段,因此它會在任何讀取操作中返回。我研究了虛擬領域,但他們不太正確,因爲他們基本上執行SQL查詢。以編程方式在CakePHP中設置模型中的字段

在這個例子中,我試圖返回一個值,基於一個簡單的檢查,看看用戶是否已激活帳戶或沒有。在我的模型,我想運行此功能:

public function status() { 
    if ($this->field('password')) { 
     return = 'active'; 
    } else if ($this->Ticket->field('id')) { 
     return = 'pending'; 
    } else { 
     return = 'inactive'; 
    } 
} 

目的是通過$用戶訪問,在我看來,[「用戶」] [「狀態」],這樣我就可以應用CSS樣式等,根據結果​​。

但是,在設置這個$ [「用戶」] [「狀態」] =狀態之間()現在是躲避我。

而且,由於我在讀我的用戶列表不同的方法(有時分頁,或一次一個用戶),這是不是我想在我的控制設置。我希望該屬性在閱讀時只出現在模型中。要調用狀態函數在回調

回答

2

如何做你的邏輯,並在afterFind回調追加到結果嗎? (其中 - 每它的名字被觸發後,你做了find())像這樣的東西:

//User model 
public function afterFind($results) { 

    if ($this->field('password')) { 
     $results[$this->alias]['status'] = 'active'; 

    } else if ($this->Ticket->field('id')) { 
     $results[$this->alias]['status'] = 'pending'; 

    } else { 
     $results[$this->alias]['status'] = 'inactive'; 
    } 
} 
+0

嗯......這給了我一個錯誤某些原因:致命錯誤:用盡33554432個字節允許內存大小(試圖分配523800字節) –

+1

聽起來像你有遞歸設置太高。我建議在AppModel中設置'public $ recursive = -1;',然後只在需要時才更改它(儘管我不認爲使用遞歸是個好主意 - 應該使用Containable) – Dave

0

試試這個:

$this->data[$this->alias]['status'] = $this->status(); 
相關問題