Yii识别时间戳列

时间:2012-10-07 19:24:54

标签: yii

我正在使用giix扩展模型(和crud)行为。在这里我想特别处理时间戳类型的列(已经存在于我的模型中),就像处理自动增量字段一样。 (忽略但未显示,即。)但是,没有属性$column->isTimestamp。我想在某个地方加上这个,但我很不知道最好的地方是什么。我把它放在giix的某个地方,还是我必须扩展column-baseclass?

编辑:我想在每个视图中忽略它们,对于每个表。由于这是很多工作,而且这是我一直想要的东西,我想自动化它。调整生成器似乎最有意义,但我不确定最好的方法是什么。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

以下是流程:

  1. 扩展您的数据库架构,如果您使用的是MySQL,则为CMysqlSchema。
  2. 扩展CMysqlColumnSchema并添加“isTimestamp”属性。
  3. 在你的CMysqlSchema子类中扩展createColumn并测试时间戳,你会看到Yii在这里进行简单的字符串比较以设置它自己的标志。在此处设置CMysqlColumnSchema中的“isTimestamp”。
  4. 告诉Yii在config:
  5. 的组件部分中使用这样的架构驱动程序
    'db' => array(
      'connectionString' => 'mysql:host=localhost;dbname=database',
      'username' => '',
      'password' => '',
      'driverMap' => array('mysql' => 'CustomMysqlSchema'),
    ),