Hamed Kamrava
Hamed Kamrava

Reputation: 12867

Yii CDbCriteria adding unwanted alias

I need to run following statements by CDbCriteria in Yii :

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`

What I've tried so far :

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

But it get me following error :

SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tbl_products.id' in 'field list'. The SQL statement executed was: SELECT tbl_products.id FROM tbl_products t INNER JOIN tbl_producttags ON tbl_products.id = tbl_producttags.product_id INNER JOIN tbl_tags ON tbl_producttags.tag_id = tbl_tags.id

The problem is :

It's because of that CDbCriteria added unwanted alias name t after tbl_products

How can I fix it?

Upvotes: 0

Views: 258

Answers (1)

Harutyun Abgaryan
Harutyun Abgaryan

Reputation: 2023

Use this

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

the alias name of the table. If not set, it means the alias is 't'

Upvotes: 2

Related Questions