Yii返回连接模型的属性

时间:2013-03-21 18:00:57

标签: php mysql yii yii-cmodel

在Yii中,我有与某个地点相关的媒体;我的关系设置如下:

公共职能关系(){

    return array(
        'users' => array(self::HAS_ONE, 'Users', array('id' => 'user_id')), 
        'locations' => array(self::HAS_ONE, 'Locations', array('id' => 'object_id'), 'together' => true, 'select' => '*')
    );
}

当我查询时,我使用'with'语句来连接表。

$models = Media::model()->with('lodcation') -> findAll($criteria);

然后我将数据放入json对象并将其作为CJSON响应返回。

echo CJSON::encode($models);

问题是返回的字段仅来自父模型,即Media,而不是已连接的模型Locations。我的问题是如何在Yii中显示父模型和连接模型结果?

2 个答案:

答案 0 :(得分:2)

你的关系

'locations' => array(self::HAS_ONE, 'Locations', array('id' => 'object_id'), 'together' => true, 'select' => '*')

名称为'locations',但是当您尝试在查询中使用它时,请参考->with('lodcation'),这使得findAll方法试图急切地从未存在的关系中加载数据。将您的通话更改为$models = Media::model()->with('locations') -> findAll($criteria); 应该纠正这个问题。

也许您正在使用的关系名称在这里产生一些噪音:'locations'复数似乎是指一系列位置。将此名称保留在单'location'中应该会使self::HAS_ONE关系的含义更加清晰。

答案 1 :(得分:1)

CJSON::encode()将始终仅使用父模型中的直接属性。您可以尝试使用其中一个扩展名: