Yii CDbCriteria添加了不需要的别名

时间:2014-10-16 12:48:26

标签: php mysql 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语句是:   选择tbl_productsid FROM tbl_products t INNER JOIN   tbl_producttags tbl_productsid =   tbl_producttagsproduct_id内部加入tbl_tags开启   tbl_producttagstag_id = tbl_tagsid

问题是:

这是因为CDbCriteria在t之后添加了不需要的别名tbl_products

我该如何解决?

1 个答案:

答案 0 :(得分: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'