Yii 识别时间戳列
我正在使用giix扩展模型和crud行为。在本文中,我希望处理timestamp类型的列,这些列已经存在于我的模型中,而不是像处理autoincrement字段一样。被忽略且未显示,即。但是,没有属性$column->isTimestamp。我想在某个地方加上这个,但我不知道什么地方是最好的地方。我是把它放在giix的某个地方,还是必须扩展列基类Yii 识别时间戳列,yii,Yii,我正在使用giix扩展模型和crud行为。在本文中,我希望处理timestamp类型的列,这些列已经存在于我的模型中,而不是像处理autoincrement字段一样。被忽略且未显示,即。但是,没有属性$column->isTimestamp。我想在某个地方加上这个,但我不知道什么地方是最好的地方。我是把它放在giix的某个地方,还是必须扩展列基类 编辑:对于每个表,我想从每个视图中忽略它们。由于这是一个很大的工作,这是我一直想要的东西,我想自动化它。调整生成器似乎最有意义,但我不确定最好的方法是
编辑:对于每个表,我想从每个视图中忽略它们。由于这是一个很大的工作,这是我一直想要的东西,我想自动化它。调整生成器似乎最有意义,但我不确定最好的方法是什么。您需要查询列模式,我没有使用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
过程如下:
扩展您的数据库模式,如果您使用的是MySQL,那么它就是CMYSQLSHEMA。
扩展CMysqlColumnSchema并添加isTimestamp属性。
在CMysqlSchema子类extendcreatecolumn和testfortimestamp中,您将看到Yii在这里进行简单的字符串比较,以设置自己的标志。在此处的CMysqlColumnSchema中设置isTimestamp。
告诉Yii在配置中的组件部分中使用模式驱动程序,如下所示:
我不完全明白你想做什么?您想扩展giix以生成忽略时间戳的代码吗?或者你想在哪里忽略它们?为什么不从视图中删除它们呢?好吧,更重要的是集中比较我对字符串比较感到紧张,只是希望“type”不会突然变为大写或其他形式。但谢谢你的回复。如果你关心这个案子,就打电话给strtolower。我知道,但我想集中这样的检查,而不是在不同的地方编写代码。通常是良好的编码实践。
'db' => array(
'connectionString' => 'mysql:host=localhost;dbname=database',
'username' => '',
'password' => '',
'driverMap' => array('mysql' => 'CustomMysqlSchema'),
),