1

モデル(およびクラッド)の動作を拡張するためにgiixを使用しています。ここでは、自動インクリメントフィールドが処理されるように、タイムスタンプ型(モデルにすでに存在する)の列を具体的に処理したいと思います。(無視され、表示されません。つまり。)ただし、プロパティはありません$column->isTimestamp。これをどこかに追加したいのですが、これに最適な場所がどこにあるのか迷っています。それをどこかにgiixに入れますか、それともcolumn-baseclassを拡張する必要がありますか?

編集:すべてのテーブルについて、すべてのビューからそれらを無視したいと思います。これは大変な作業であり、私が常に望んでいることなので、自動化したいと思います。ジェネレーターを適応させるのが最も理にかなっているようですが、それを行うための最良の方法が何であるかはわかりません。

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サブクラスextendcreateColumnでタイムスタンプをテストすると、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 に答える