我需要在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_products
。id
FROMtbl_products
t
INNER JOINtbl_producttags
tbl_products
。id
=tbl_producttags
。product_id
内部加入tbl_tags
开启tbl_producttags
。tag_id
=tbl_tags
。id
问题是:
这是因为CDbCriteria在t
之后添加了不需要的别名tbl_products
我该如何解决?
答案 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'