未知列 - CDbCriteria中的多个连接

时间:2011-12-22 13:12:04

标签: activerecord join yii

我正在尝试从多个表中获取数据,但我已经结束了此错误: SQL:SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'p.firstname'

    $criteria = new CDbCriteria;
    $criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email';
    $criteria->join = 'LEFT JOIN `profiles` p ON  p.user_id = user_id';
    $criteria->join = 'LEFT JOIN users u ON user_id = u.id';
    $criteria->condition = 'offer_id = :oID';
    $criteria->params = array(':oID' => $_GET['id']);

    $model = MyModel::model()->findAll($criteria);

任何人都知道我做错了什么? 或者有更好的方法来获取相关数据吗?

3 个答案:

答案 0 :(得分:18)

你犯了同样的错误。

覆盖第一次加入第二次加入,而不是附加第二次加入

$criteria->join  = "join ...."; //first join
$criteria->join .= "join ...."; //second join

欢呼声

答案 1 :(得分:7)

实际上更好地使用这样的“with”子句:

$criteria->with = array(
    'profiles '=>array(
         'select'=>'profiles.user_id',
         'together'=>true
     ),
    'users'=>array(
          'select'=>'users.id',
          'together'=>true
     )
);

您也可以在模型搜索CGridView DataProvider时使用它。

答案 2 :(得分:3)

如果您显示数据库结构,那就更好了。但是,这是使用左连接

连接多个表的解决方案

连接表的代码:

$criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email';
$criteria->alias = 'c';
$criteria->join = 'LEFT JOIN profiles p ON  (p.user_id = c.user_id) LEFT JOIN users u ON (c.user_id = u.id)';

希望它会对你有所帮助。