2010-08-30 13 views
3

歷史不長;我討厭我不能在CakePHP中使用枚舉,但我明白了。然而,我擁有的另一個寵物是我的布爾人返回0或1,並且沒有辦法普遍地將它們變成是和否。如何獲得關聯模型以運行__construct?

所以我雖然我會在AppModel的afterFind方法中創建一個小函數來爲我做這個。我想要採取的第一步是確定哪些列布爾值(因爲某些列將返回零和不需要轉換的列)。我設計的代碼,這個小和平:

function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
    foreach($this->_schema as $col => $colDetails){ 
     if($colDetails['type'] == 'boolean') 
      $this->_booleans[] = $col; 
    } 
} 

但是快速調試($本)中,只有當前模型的布爾列拍攝的模特秀。當我直接擊中這些列時,$ this - > _布爾值將再次出現,而不是相關模型的值。

我查看了手冊和API ..我沒有看到如何解決方案。

我在做什麼錯?

回答

2

爲了使應用程序數據庫類型無關,CakePHP不支持枚舉。枚舉不被許多數據庫引擎支持。您的任務,最簡單的解決方法是:

echo $model['boolField'] ? 'Yes' : 'No'; 
+2

+1做**不**在'afterFind'中將布爾變成'是'和'否',只是不要。它是關於視圖的代碼,所以這就是你需要這樣做的地方。否則,您的*業務邏輯*必須將值與'是'和'否'比較,而不是布爾值,這是一場等待發生的災難。 – deceze 2010-08-31 01:48:48

+0

@bancer,這將在我看來? – 2010-08-31 21:04:56

+0

@天使:沒錯。在你的看法:)只要用你的布爾型字段替換'$ model ['boolField']'。 – bancer 2010-08-31 21:19:38

0

的問題是,$this->_booleans在AppModel只包含當前模型的架構細節。實際上,代碼可能正在工作。你應該檢查$this->_booleans$this->Related->_booleans,我敢打賭你會找到你要找的。

+0

我希望這是斯蒂芬的情況。然而,就像我提到的,我做了一個調試($ this),看到$ this-> Related - > _ booleans數組,但是他們在空數組中:-(當我訪問該模型時$ this - > _布爾值被填充,但所有$ this->相關 - > _布爾值又是空陣列。 – 2010-08-31 04:20:33

+0

嗯...讓我再想一想你的問題。 – Stephen 2010-08-31 12:00:47