2011-12-22 2 views
6

Я пытаюсь получить данные из нескольких таблиц, и я закончил с этой ошибкой: SQL: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'p.firstname' в 'список полей'Неизвестная колонка - множественные объединения в 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.