-
Notifications
You must be signed in to change notification settings - Fork 106
Open
Description
Hi,
having the situation of selecting users having 'admin' role and any of some predefined roles set one can use, for example, next sequence
$admins = ORM::factory('Role')->where('name', '=', 'admin')->find()->customers;
// $rids is an array of predefined roles IDs
$admins
->distinct(TRUE)
->join('customer_role', 'roles_list')->on('roles_list.customer_id', '=', 'user.id')
->where('roles_list.role_id', 'in', $rids);
this produces absolutely perfectly valid SQL:
SELECT DISTINCT `user`.*
FROM `customer` AS `user`
JOIN `customer_role` ON (`customer_role`.`customer_id` = `user`.`id`)
JOIN `customer_role` AS `roles_list` ON (`roles_list`.`customer_id` = `user`.`id`)
WHERE `customer_role`.`role_id` = '2' AND `roles_list`.`role_id` IN (2, 9, 1, 8)
However, if we try to count such admins using $admins->count_all()
this is rendered to wrong sQL like this:
SELECT DISTINCT COUNT(`user`.`id`) AS `records_found`
FROM `customer` AS `user`
JOIN `customer_role` ON (`customer_role`.`customer_id` = `user`.`id`)
JOIN `customer_role` AS `roles_list` ON (`roles_list`.`customer_id` = `user`.`id`)
WHERE `customer_role`.`role_id` = '2' AND `roles_list`.`role_id` IN (2, 9, 1, 8)
Which in turn gives wrong count. It easy to see that we need to have
SELECT COUNT(DISTINCT
user.
id)
instead of
SELECT DISTINCT COUNT(
user.
id)
see https://github.com/kohana/orm/blob/3.3/master/classes/Kohana/ORM.php#L1621
particularly starting from line 1644 (https://github.com/kohana/orm/blob/3.3/master/classes/Kohana/ORM.php#L1644)
Thanks
Metadata
Metadata
Assignees
Labels
No labels