2011-12-22 23 views
6

我試圖從多個表中獲取數據,並且以此錯誤結束: SQL:SQLSTATE [42S22]:未找到列:1054未知列'p.firstname'中的'field list'未知列 - CDbCriteria中的多個連接

$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); 

任何人都知道我在做什麼錯了? 還是有更好的方式來獲取相關數據?

回答

18

你犯了同樣的錯誤我做了嘿嘿。

你是覆蓋第一次加入第二個,而不是追加第二個加入

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

歡呼

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)'; 

希望它會幫助你。

7

其實這樣的方式更好的用戶一些 「與」 條款:

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

可以在模型也用這個搜索CGridView DataProvider的。