Страница 1 из 1
getTotalCount для DataProvider показывает неправильный результат
Добавлено: 2021.06.09, 18:24
porcelanosa
$dataProvider один и тот же - это копи-паст из реального проекта. Строчки идут одна за одной.
Код: Выделить всё
$totalCount = $dataProvider->getTotalCount(); //415
$all = $dataProvider->query->all(); // 270
Казалось бы простейший код.
Но результат разный.
С чем это может быть связано?
Re: getTotalCount для DataProvider показывает неправильный результат
Добавлено: 2021.06.09, 18:27
german.igortcev
$query датапровайдера покажите
Re: getTotalCount для DataProvider показывает неправильный результат
Добавлено: 2021.06.09, 20:15
rak
можно поставить модуль yii2-debug и посмотреть какие там генерируются запросы
Re: getTotalCount для DataProvider показывает неправильный результат
Добавлено: 2021.07.09, 13:34
porcelanosa
Код: Выделить всё
$query = ProductModel::find();
$query->innerJoinWith(['userListItems']);
$query->asArray();
$query->andFilterWhere(['in', 'list_id', $this->list_ids]);
Связь простейшая.
Код: Выделить всё
public function getUserProductListItems() {
return $this->hasMany(UserProductListItem::class, ['product_id' => 'id']);
}
rak писал(а): ↑2021.06.09, 20:15
можно поставить модуль yii2-debug и посмотреть какие там генерируются запросы
Стоит - вот запросы:
Тут еще одна связь добавлена, но после опубликования вопроса.
Код: Выделить всё
SELECT COUNT(*) FROM `product` INNER JOIN `user_product_list_item` ON `product`.`id` = `user_product_list_item`.`product_id` INNER JOIN `instore_markup` ON `product`.`department_id` = `instore_markup`.`department_id` WHERE (`list_id` IN ('3', '5', '7', '8', '11', '12', '13', '14', '15')) AND (`system_status` != 'deleted') AND (`system_status` NOT IN ('deleted', 'del_candidate')) AND (`product`.`status` != 'deleted')
SELECT `product`.* FROM `product` INNER JOIN `user_product_list_item` ON `product`.`id` = `user_product_list_item`.`product_id` INNER JOIN `instore_markup` ON `product`.`department_id` = `instore_markup`.`department_id` WHERE (`list_id` IN ('3', '5', '7', '8', '11', '12', '13', '14', '15')) AND (`system_status` != 'deleted') AND (`system_status` NOT IN ('deleted', 'del_candidate')) AND (`product`.`status` != 'deleted')
Re: getTotalCount для DataProvider показывает неправильный результат
Добавлено: 2021.07.09, 13:39
porcelanosa
https://prnt.sc/19pl7id
вот результаты запроса
Re: getTotalCount для DataProvider показывает неправильный результат
Добавлено: 2021.07.09, 15:39
unknownby
Проблема в $dataProvider явно
Проверил на своем проекте и оба варианта выдали одинаковый результат
Код: Выделить всё
var_dump($dataProvider->getTotalCount()); //39
var_dump($dataProvider->query->count()); //39
Хотя в запросе 5 джоинов, два условия
Re: getTotalCount для DataProvider показывает неправильный результат
Добавлено: 2021.07.12, 10:41
ladserg
INNER JOIN возвращает пересечение данных, т.е. количество строк может быть меньше чем в каждой из таблиц. getTotalCount() похоже просто возвращает количество строк в таблице, без учета пересечения. Возможно дело в этом.