我的代码:
$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
和userProfile
表的数据。
答案 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);