如何在YII上使用CDbCriteria时从查询中排除主键选择

时间:2014-09-03 05:55:39

标签: php sql postgresql yii

当使用CDbCriteria与另一个表连接时,我遇到了默认选择主键的问题 我有2张桌子:

Content (
  id int2 pk,
  title varchar,
  content varchar,
  categoryid int2 fk
)
Category (
  id int2 pk,
  name varchar,
  ...
)

我想在类别中选择namecount(id)别的),并按名称对其进行分组以获取类别的数量。但是当我尝试以下操作时,由于选择了主键,我会收到错误。

$criteria=new CDbCriteria();
$criteria->with=array('category' => array('alias' => 'c', 'select' => 'c.name, COUNT(c.id) AS quantity'));
$criteria->select=array();
$criteria->group='c.name';
$result=Content::model()->findAll($criteria);

它给我以下错误:
[Err] ERROR: column "t.id" must appear in the GROUP BY clause or be used in an aggregate function
我现在想到的问题的解决方案是从条件中获取生成的SQL并将其替换为空字符串(我找不到获取SQL的方法)或更改框架代码(这看起来要复杂得多) 。
我的数据库管理器是PostgreSQL 附:将ID添加到分组并没有帮助到处的数量变成1.
感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为小组必须在此:

$criteria->with=array('category' => array('alias' => 'c', 'select' => 'c.name, COUNT(c.id) AS quantity', 'group' => 'c.name'));