Reputation: 12867
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
FROMtbl_products
t
INNER JOINtbl_producttags
ONtbl_products
.id
=tbl_producttags
.product_id
INNER JOINtbl_tags
ONtbl_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
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