yii - 使用关系HAS_ONE从相关表中获取数据以显示在列表页面中

时间:2010-07-22 13:02:44

标签: php yii

我有两张桌子

big(id,bigs_name,smallid),

small(id,smallguys_name)

因此有两个模型 - 大小

我在大模型中使用了以下关系,(我希望这种关系是正确的)

'has_small'  => array(self::HAS_ONE, 'small', 'smallid')

默认情况下,actionIndex创建为

public function actionIndex()
{
  $dataProvider=new CActiveDataProvider('IphoneSubscription');
  $this->render('index',array(
   'dataProvider'=>$dataProvider,
  ));
}

在_view.php中我想显示'smallguys_name'来代替默认显示的'smallid'。这是在正常的PHP我会采取'smallid'并从'小'选择更正的行。我如何在yii中完成?

我在_view.php中有这个 -

echo $data->smallid;

输出 - 来自'big'的id

我试过了 -

echo $data->has_small->smallguys_name;

我得到以下CDbException

  

找不到列:1054'where子句'中的未知列'has_small.smallid'

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

问题是,如果使用“HAS_ONE”关系,它会尝试在SMALL表中查询SMALLID(has_small.smallid)而不是ID(has_small.id)。如果BIG与SMALL确实存在“HAS_ONE”关系,则需要将BIG的外键放入SMALL(触发它们),如下所示:

big(id,bigs_name)

small(id,smallguys_name,bigid)

'has_small'  => array(self::HAS_ONE, 'small', 'bigid')

否则,如果你想保持你的数据库结构相同,我会使用你在评论中提到的BELONGS_TO关系:

'has_small'  => array(self::BELONGS_TO, 'small', 'smallid')

答案 1 :(得分:2)