Yii CActiveDataProvider数据未从连接表加载

时间:2014-04-28 12:03:30

标签: php mysql yii cactivedataprovider

我的代码:

$criteria = new CDbCriteria();

//  $criteria->select = array("id");

$criteria->with = array('userProfiles'=>array(
    'select'=>'firstname'
));
$criteria->together = true;

$criteria->condition = "firstname like '%$q%' "
        . "and (user_id not in (select id2 from friends where id1=$user_id) "
        . "and user_id not in (select id1 from friends where id2=$user_id))";

$dataProvider = new CActiveDataProvider("Users", array(
    'criteria' => $criteria
));

return $dataProvider;

注意:

1- userProfiles关系在用户模块中定义

问题:

尽管提供了选择属性'select'=>'firstname'

,它仅从User表加载数据,而不是从user_profiles表加载数据

我想要来自useruserProfile表的数据。

1 个答案:

答案 0 :(得分:1)

关系self :: HAS_ONE不能与主查询一起执行,请尝试使用join

$ criteria-> select =" *,user_profiles.firstname firstname&#34 ;; $ criteria-> join =' user_profiles ON user_profiles.user_id = users.id';

这样的东西,但你应该在用户AR中创建名字字段来检索它。

或者改变与HAS_MANY的关系并检查数组的第一个实体。

together:是否应强制与此关系关联的表与主表和其他表连接在一起。此选项仅对HAS_MANY和MANY_MANY关系有意义。

因为您无法编写查询,只能为每个加入记录提供一条记录

SELECT * FROM main
INNER JOIN slave ON (slave.main_id = main.id limit 1) // will not work);