Gii を使用して CRUD を生成し、私のブログを読んでください。http://jmmurphy.blogspot.com/2013/05/using-yii-model-relations.html
基本的に、Gii 生成後の store_id フィールドには次のようなものがあります。
<?php echo $form->labelEx($model,'store_id'); ?>
<?php echo $form->textField($model, 'store_id', array('size'=>60,'maxlength'=>255));?>
<?php echo $form->error($model,'store_id'); ?>
textField 行は次のように置き換えられます。
<?php $list = CHtml::listData(Store::model()->findAll(), 'id', 'name'); ?>
<?php echo $form->dropDownList($model, 'store_id', $list, array('empty'=>'(Select a Store)')); ?>
次のように、(データベースが外部キーをサポートしていない場合でも) 関連するテーブルにアクセスできるように、メイン モデルでリレーションを定義する必要もあります。
public function relations()
{
return array(
'store'=>array(self::BELONGS_TO, 'Store', 'store_id'),
);
}
このリレーションを完成させるには、Store モデルに次のリレーションも追加する必要があります。
public function relations()
{
return array(
'main'=>array(self::HAS_MANY, 'Main', 'store_id'),
);
}
これらの関係は、Store と Main の間の 1 対多の関係を定義します。ここで、store は親であり、Main は子です。1 対 1 の関係にするには、HAS_MANY を HAS_ONE に変更します。HAS_* は親モデルに入り、子テーブルの外部キー属性を指します。BELONGS_TO は子に入り、親の主キーを指す子テーブルの属性を伝えます。
view アクションでストア名を表示するには、view.php の「store_id」を次のような配列に変更する必要があります。
array(
'name' => 'store_id',
'value' => $model->store->name,
)
管理画面は若干異なります。正確な理由はわかりませんが、管理ビューで ID の代わりにストア名を表示するには、次のような配列を使用する必要があります。
array(
'name' => 'store_id',
'value' => '$data->store->name',
)
$model の代わりに $data がモデルになるように Gii がこれを生成することに注意してください。また、変数宣言を単一引用符で囲む必要があるように、ファンキーな二重間接処理を行うことに注意してください。