0

在 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 中同时显示父模型和连接模型结果?

4

2 回答 2

2

你的关系

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

有 name 'locations',但是当您尝试在查询中使用它时,您会引用->with('lodcation'),这使得 findAll 方法试图从不存在的关系中急切地加载数据。更改您的呼叫$models = Media::model()->with('locations') -> findAll($criteria); 应该可以解决此问题。

也许您使用的关系名称在这里引起了一些噪音:'locations'复数似乎指的是一系列位置。保持这个名字单一'location'应该使self::HAS_ONE关系的含义更清楚。

于 2013-03-21T18:43:00.127 回答
1

CJSON::encode()将始终只使用父模型的直接属性。您可以尝试以下扩展之一:

于 2013-03-21T18:09:41.217 回答