简体   繁体   中英

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?

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'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM