2012-10-07 42 views
1

我使用giix擴展模式(和污物)行爲。在這裏,我想特別處理時間戳類型(已經存在於我的模型中),而非像處理自動增量字段。 (忽略並不顯示,即。)但是,沒有屬性$column->isTimestamp。我想補充一點,但我不知道最好的地方是什麼。我是否把它放在giix的某處,還是我必須擴展列基類?Yii的認識時間戳列

編輯:我想從每個視圖忽略他們,每個表。由於這是很多工作,而且這是我一直想要的,所以我想將其自動化。調整發電機似乎是最有意義的,但我不確定實現它的最佳方式是什麼。

+0

我不正是unterstand你正在嘗試做什麼?你想爲自己的代碼生成giix而忽略時間戳?或者你想忽略它們在哪裏?爲什麼不把它們從視圖中刪除? – Asgaroth

回答

0

下面的過程是:

  1. 擴展數據庫模式,如果你在MySQL上它是CMysqlSchema。
  2. 擴展CMysqlColumnSchema並添加 「isTimestamp」 屬性。
  3. 在你CMysqlSchema子類擴展createColumn並測試一個時間戳,你會看到的Yii使得簡單的字符串比較此處設置它自己的標誌。在這裏的CMysqlColumnSchema中設置「isTimestamp」。
  4. 告訴Yii中使用這樣的模式驅動程序在你的組件部分在配置:
'db' => array(
    'connectionString' => 'mysql:host=localhost;dbname=database', 
    'username' => '', 
    'password' => '', 
    'driverMap' => array('mysql' => 'CustomMysqlSchema'), 
), 
0

您將需要查詢的列架構,我沒有用giix,但發現在那裏產生的意見,應該通過循環無論是模型屬性或底層表的架構。

如果通過模式循環:

//you can also ask Yii for the table schema with Yii::app()->db->schema->getTable[$tableName]; 
if ('timestamp' === $tableSchema->columns[$columnName]->dbType) 
    continue; //skip this loop iteration 

如果遍歷屬性:

$dbType = Yii::app()->db->schema->getTable[$model->tableName]->columns[$modelAttribute]->dbType; 
if ('timestamp' === $dbType) 
    continue; //skip this loop iteration 
+0

嗯,這是更集中的比較(我感到緊張的字符串比較,只是希望「類型」不會突然得到改變爲大寫或什麼的。)但是,感謝您的答覆。 – Inca

+0

如果您擔心的話,請致電strtolower。 – Luke

+0

我知道,但我想集中這樣一張支票,而不是在不同的地方編碼。通常很好的編碼習慣。 – Inca