使用 Gii 生成 CRUD,然后阅读我的博客。http://jmmurphy.blogspot.com/2013/05/using-yii-model-relations.html
基本上,在 Gii Generation 之后,您的 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)')); ?>
您还需要在 Main 模型中定义关系,以便您可以访问相关表(即使您的数据库不支持外键),如下所示:
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 之间的一对多关系,其中 store 是父级,而 Main 是子级。要使其成为一对一关系,请将 HAS_MANY 更改为 HAS_ONE。HAS_* 进入父模型并指向子表中的外键属性。BELONGS_TO 进入子表并告诉子表中指向父表主键的属性。
现在要在视图操作中查看商店名称,您需要将 view.php 中的“store_id”更改为如下所示的数组:
array(
'name' => 'store_id',
'value' => $model->store->name,
)
管理视图略有不同。我不确定为什么,但是要在管理视图中查看商店名称而不是 id,您需要使用如下所示的数组:
array(
'name' => 'store_id',
'value' => '$data->store->name',
)
请注意,Gii 生成这个,因此 $data 是模型而不是 $model,而且它还做了一个时髦的双间接操作,因此您需要将变量声明放在单引号中。