Skip to content

Lines duplicated when ordering on a n-n join table using find() method in the DAO #249

@ThibBal

Description

@ThibBal

Data model :

  • admin_users table (extends users table)
  • zones table
  • admin_users_zones table to store admin_user_id,zone_id

Problem encountered: when listing admin_users (using find() method in UserDao.php) with their zones and ordering on them, my lines are duplicated. But the "count" method still returns the correct number.

Capture d’écran 2021-02-09 à 18 22 54

Here is the SQL request generated by TDBM:

SELECT DISTINCT 
  `users`.`id` AS `users____id`, `users`.`email` AS `users____email`, 
 `zones`.`id` AS `zones____id`,  `zones`.`label` AS `zones____label`
FROM   `admin_users`   
  LEFT JOIN `users` ON (    `admin_users`.`id` =   `users`.`id`)   
  LEFT JOIN `admin_users_zones` ON (    `admin_users_zones`.`admin_user_id` =   `admin_users`.`id`)   
  LEFT JOIN `zones` ON (    `admin_users_zones`.`zone_id` =   `zones`.`id`)   
  LEFT JOIN `admin_users_poles` ON (    `admin_users`.`pole_id` =   `admin_users_poles`.`id`)   
  LEFT JOIN `admin_users_roles` ON (    `admin_users`.`role_id` =   `admin_users_roles`.`id`)   
  LEFT JOIN `user_status` ON (    `users`.`status_id` =   `user_status`.`id`)
WHERE   (  (  (    `users`.`lastname` LIKE   '%%')
  OR (    `users`.`firstname` LIKE   '%%')))
  AND (  (    `users`.`email` LIKE   '%admin@mail.com%'))
ORDER BY   `zones`.`label` ASC LIMIT 10

Data model creation:

create users (id, email)
create roles (id, label)
create users_roles (id_user, id_role)

insert into roles (1, 'A'), (2, 'b')
insert into users (1, 'admin')
insert into users_roles (1, 1), (1, 2)

Method called: ->find('', [], 'roles.label ASC')

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions