[1943] Столкнулся с проблемой

Уже исправленные репорты или принятые предложения
Закрыто
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

[1943] Столкнулся с проблемой

Сообщение leshov »

Столкнулся с проблемой:

Код: Выделить всё

$criteria = new CDbCriteria;
$criteria->select = 't.*';
$criteria->join ='LEFT JOIN testm ON testm.test_id=t.id';
$criteria->group ='t.id';
$criteria->having = 'count(testm.id)>0';
$list = Test::model()->findAll($criteria);
 
Код эквивалентен SQL-запросу

Код: Выделить всё

SELECT t.* FROM test t LEFT JOIN testm ON testm.test_id=t.id GROUP BY t.id HAVING count(testm.id)>0
Так вот: count($list) выдает 1, а Test::model()->count($criteria) выдает 7. Так и должно быть?
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Re: Столкнулся с проблемой

Сообщение leshov »

таблицы, соответствующие моделям:

Код: Выделить всё

CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;


INSERT INTO `test` VALUES (1);
INSERT INTO `test` VALUES (2);
INSERT INTO `test` VALUES (3);
INSERT INTO `test` VALUES (4);
INSERT INTO `test` VALUES (5);


CREATE TABLE `testm` (
  `id` int(11) NOT NULL auto_increment,
  `test_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `test_id` (`test_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


INSERT INTO `testm` VALUES (1, 1);
INSERT INTO `testm` VALUES (2, 1);
INSERT INTO `testm` VALUES (3, 1);
 
youroff
Сообщения: 228
Зарегистрирован: 2010.02.25, 16:05

Re: Столкнулся с проблемой

Сообщение youroff »

Может ActiveRecord::count() сходит с ума от такого аргумента? По идее там должно быть просто условие (хотя описании стоит or criteria)...
http://www.yiiframework.com/doc/api/1.1 ... unt-detail
Я бы для пробы убрал из criteria select = 't.*';

Да, оно вызывает createCountCommand, который создает запрос Count(*), так что select в критериях должен сбивать его с толку.
http://www.yiiframework.com/doc/api/1.1 ... and-detail
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Re: Столкнулся с проблемой

Сообщение leshov »

Спасибо за подсказку.
В функции CDbCommandBuilder::createCountCommand есть такой кусок:

Код: Выделить всё

        if(!empty($this->group) || !empty($this->having))
        {
            $select=is_array($criteria->select) ? implode(', ',$criteria->select) : $criteria->select;
            if($criteria->alias!='')
                $alias=$criteria->alias;
            $sql=($criteria->distinct ? 'SELECT DISTINCT':'SELECT')." {$select} FROM {$table->rawName} $alias";
            $sql=$this->applyJoin($sql,$criteria->join);
            $sql=$this->applyCondition($sql,$criteria->condition);
            $sql=$this->applyGroup($sql,$criteria->group);
            $sql=$this->applyHaving($sql,$criteria->having);
            $sql="SELECT COUNT(*) FROM ($sql) sq";
        }
        else
        {
 
По смыслу должно быть не $this->group а $criteria->group и, соответственно, не $this->having, а $criteria->having
Свойств 'group' и 'having' нет в классе CDbCommandBuilder, зато они есть в классе CDbCriteria.
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Re: Столкнулся с проблемой

Сообщение leshov »

Я поправил и все заработало правильно :)
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Re: Столкнулся с проблемой

Сообщение leshov »

А кому отсылать инфу по багам в ядре?
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: Столкнулся с проблемой

Сообщение BuCeFaL »

перед постом лучше создать раздел на форуме (Баг-репорты и предложения), а если действительно баг тогда добавить issue на google code
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Столкнулся с проблемой

Сообщение samdark »

Перенёс в соответствующий раздел. Если сможете сформулировать на английском — пишите сразу в трекер: http://code.google.com/p/yii/issues/list
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Re: Столкнулся с проблемой

Сообщение leshov »

Отписал в трекер -- http://code.google.com/p/yii/issues/detail?id=1943, уже ответили:

This is already fixed in SVN.
Закрыто