2011-12-22 7 views
6

複数のテーブルからデータを取得しようとしていますが、このエラーで終了しました。 SQL:SQLSTATE [42S22]:列が見つかりません:1054不明な列 'p.firstname' in 「フィールドリスト」不明な列 - 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データプロバイダを探しモデルでも、これを使用することができます。