Делаю обычный запрос:
$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'));