Preference::model()->find(array('select' => 'sum(amount) as amount')); works fine, but if I use with('something') SUM(...) is not generated... instead of it generated simple field without SUM(...) group operation
Preference::model()->find(array('select' => 'sum(amount) as amount')); works fine, but if I use with('something') SUM(...) is not generated... instead of it generated simple field without SUM(...) group operation
What is the generated SQL?
In the upcoming 1.0.4 release, we added a new relation called STAT. It is mainly used to solve this problem in an easy way.
SELECT `pref`.`amount` AS t0_c6, `pref`.`id` AS t0_c0, log.`id` AS t1_c0 FROM `pref` LEFT OUTER JOIN `log` log ON `pref`.`logId`=log.`id`
for code:
Preference::model()->with(array(
'log' => array('select' => 'id')
))->find(array(
'select' => array('sum(??.amount)' => 'amount'),
))
if I use:
'select' => 'sum(??.amount) as amount',
amount selector not generated…
Where I can find STAT documentation? ![]()
Qiang, maybe you need to change CActiveFinder.php (small bugfix):
$alias=$matches[2];
if(!isset($this->_columnAliases[$alias]))
{
$this->_columnAliases[$alias]=$alias;
$columns[]=$name;
$selected[$alias]=1;
}
to:
$alias=$matches[2];
if(!isset($this->_columnAliases[$alias]) || $this->_columnAliases[$alias]!==$alias)
{
$this->_columnAliases[$alias]=$alias;
$columns[]=$name;
$selected[$alias]=1;
}
or to:
$alias=$matches[2];
if(!isset($this->_columnAliases[$alias]) || false===in_array($name,$columns,true))
{
$this->_columnAliases[$alias]=$alias;
$columns[]=$name;
$selected[$alias]=1;
}