1

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

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

4

2 回答 2

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
于 2012-10-11T07:44:34.390 回答
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'),
),
于 2012-10-12T15:37:02.337 回答