Задать вопрос

Почему в Yii может не правильно работать count в моделе?

Делаю обычный запрос:
$criteria = new CDbCriteria();
$criteria->addCondition('t.user_id = :uid OR company.id IN (:cid)');
$criteria->with = array('company' => array('select' => 'Name'));
$criteria->params = array(':uid' => Yii::app()->user->id, ':cid' => implode(', ', $arCID));
Bill::model()->count($criteria)


Из которого получается:
SELECT COUNT(DISTINCT `t`.`id`) FROM `o_bills` `t` LEFT OUTER JOIN `o_company` `company` ON (`t`.`companyId`=`company`.`id`) WHERE (t.user_id = :uid OR company.id IN (:cid))

и этот код возвращает 10 позиций

Сделал этот же запрос на прямую в БД, получил 25 записей. Подумал что возможно я на прямую работаю с другой бд(копии), для теста добавил запись в базу данных, получил 11 от Yii и 26 от мускуля на прямую, удалил 3 записи -> Yii = 10, Mysql = 23.

Никаких выражений по умолчанию в в моделе нет которые могли бы приццепиться к запросу и повлиять на итог, но на всякий случай залез в код в то самое место где идет запрос в БД (Github на строку) выводит тоже значение! Что это может быть?

Решение:
Переписал запрос вот таким образом, по факту получается один и тотже SQL, но срабатывает правильно. В чем подвох так и не понял!

$criteria = new CDbCriteria();
$criteria->addInCondition('company.id', $arCID);
$criteria->addCondition('t.user_id = :uid', 'OR')->params[':uid'] = Yii::app()->user->id;
$criteria->with = array('company' => array('select' => 'Name'));
  • Вопрос задан
  • 837 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
SamDark
@SamDark
Yii2 core team
Yii считает не количество возвращаемых сырых строк, а количество возвращаемых моделей типа Bill.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
HollowJ
@HollowJ
PHP разработчик
как вариант, не все записи в бд имеют заполненные поля, которые в модели указаны как обязательные. В таком случае фреймворк их проигнорирует, насколько помню.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы