在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中显示父模型和连接模型结果?
答案 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()
将始终仅使用父模型中的直接属性。您可以尝试使用其中一个扩展名: