モデルがあります: テーブル、列、インデックス、index_column。関係:
表 1..* 列
テーブル 1..* インデックス
インデックス 1..* index_column
モデル テーブルで定義されたリレーション:
'columns' => array(self::HAS_MANY, 'AdColumn', 'table_id'),
'indexes' => array(self::HAS_MANY, 'AdIndex', 'table_id'),
モデル列で定義された関係:
'table' => array(self::BELONGS_TO, 'AdTable', 'table_id'),
モデル インデックスで定義された関係:
'columns' => array(self:: HAS_MANY, 'AdIndexColumn', 'index_id'),
'table' => array(self:: BELONGS_TO, 'AdTable', 'table_id'),
モデル index_column で定義された関係:
'column' => array(self::BELONGS_TO, 'AdColumn', 'column_id'),
'index' => array(self::BELONGS_TO, 'AdIndex', 'index_id'),
'table' => array(self::BELONGS_TO, 'AdTable', 'table_id'),
テーブルのリストを(CGridViewを使用して)表示する必要があります。各行には、テーブルの列のリストとインデックスのリスト(名前+列)が必要です。
モデルはGiiで生成されるので、試しました:
$filter = new AdTable('search');
$filter->unsetAttributes(); // clear any default values
$dataProvider = $filter->with('columns', 'indexes')->search();
そして、これによりクエリが生成されました:
- すべてのテーブルをフェッチするために、
- 上記のテーブルのすべての列を取得するため
- 上記のテーブルのすべてのインデックスを取得するため
ただし、インデックスごとに、インデックス列を取得するための別のクエリがあります。Yii によってすべてが 1 つのクエリにまとめられたクエリが好きです。