Неизвестный столбец - несколько объединений в CDbCriteria - PullRequest
6 голосов
/ 22 декабря 2011

Я пытаюсь получить данные из нескольких таблиц, и я закончил с этой ошибкой: 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 ]

18 голосов
/ 05 ноября 2012

Вы делаете ту же ошибку, которую я сделал хе-хе.

Вы перезаписываете первое соединение вторым, вместо добавляете второе соединение .

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

ура

7 голосов
/ 06 февраля 2013

На самом деле лучше использовать какое-то предложение "with", например:

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

Вы можете использовать это также при поиске модели для CGridView DataProvider.

3 голосов
/ 22 декабря 2011

Лучше, если вы покажете свою структуру базы данных.Но здесь есть решение объединить несколько таблиц, используя left join

Код для объединения таблиц:

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

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...