0

我有两张桌子

大(id,bigs_name,smallid),

小(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”并从“small”中选择更正的行。我如何在 yii 中做到这一点?

我在 _view.php 中有这个 -

echo $data->smallid;

输出 - 'big' 的 id

我试过这个 -

echo $data->has_small->smallguys_name;

我得到以下 CDbException

未找到列:1054“where 子句”中的未知列“has_small.smallid”

谢谢您的帮助

4

2 回答 2

3

问题在于,对于“HAS_ONE”关系,它试图在 SMALL 表中查询 SMALLID (has_small.smallid) 而不是 ID (has_small.id)。如果 BIG 确实与 SMALL 有“HAS_ONE”关系,则需要将 BIG 的外键放入 SMALL(翻转它们),如下所示:

大(id,bigs_name)

小(id,smallguys_name,bigid)

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

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

'has_small'  => array(self::BELONGS_TO, 'small', 'smallid')
于 2010-07-22T17:06:24.507 回答
2

你应该在大模型中喜欢这个从大到小的关系,

'has_small'  => array(self::BELONGS_TO, 'small', 'smallid');
于 2010-07-24T10:56:01.917 回答