2014-10-16 2 views
0

мне нужно запустить после заявлений CDbCriteria в Yii:Yii CDbCriteria добавления нежелательных псевдоним

SELECT `tbl_products`.`id` FROM `tbl_products` 
INNER JOIN `tbl_producttags` 
    ON `tbl_products`.`id` = `tbl_producttags`.`product_id` 
INNER JOIN `tbl_tags` 
    ON `tbl_producttags`.`tag_id` = `tbl_tags`.`id` 

То, что я пытался до сих пор:

$criteria = new CDbCriteria(); 
    $criteria->select= '`tbl_products`.`id`'; 
    $criteria->join ='INNER JOIN `tbl_producttags` ON `tbl_products`.`id` = `tbl_producttags`.`product_id`' 
        . ' INNER JOIN `tbl_tags` ON `tbl_producttags`.`tag_id` = `tbl_tags`.`id`';  
    $products = Products::model()->findAll($criteria); 

Но поймите меня следующее сообщение об ошибке:

Оператор SQL: SQLSTATE [42S22]: Колонка не найдена: 1054 Неизвестная колонка 'tbl_products.id' в 'списке полей'. Выполненный оператор SQL: SELECT tbl_products. id ОТ tbl_productst INNER JOIN tbl_producttags ON tbl_products. id = tbl_producttags. product_id INNER JOIN tbl_tags ON tbl_producttags. tag_id = tbl_tags. id

Проблема заключается в том:

Это из-за того, что CDbCriteria добавил нежелательную псевдоним t после tbl_products

Как я могу это исправить?

+0

Вы не выбрали таблицу tbl_products в своем соединении, но –

ответ

1

Используйте этот

$criteria = new CDbCriteria(); 
    $criteria->select= '`yourAlias`.`id`'; 
    $criteria->alias="yourAlias"; 
    $criteria->join ='INNER JOIN `tbl_producttags` ON `tbl_products`.`id` = `tbl_producttags`.`product_id`' 
        . ' INNER JOIN `tbl_tags` ON `tbl_producttags`.`tag_id` = `tbl_tags`.`id`';  
    $products = Products::model()->findAll($criteria); 

имя псевдонима таблицы. Если не задано, это означает, что псевдоним равен 't'

+0

Можно ли вообще удалить этот псевдоним 't'? –

+0

вы можете установить это 'alias' => $ this-> tableName(), но вы не можете удалить псевдоним –

+0

Спасибо. решаемая –

Смежные вопросы