In Symfony 4, I have a field where by typing part of the the username or 
email and returns users from the database making an AJAX call.

Is working fine except I do not need users that have role ADMIN. So I 
changed the query adding the 'u.roles NOT KIKE :role' and returns no 
results.

If I remove the 2 following lines :

        ->andWhere('u.roles NOT LIKE :role')
        ->setParameter('role', '%ADMIN%')

the query is working fine.

Here is the query :

    return $this->createQueryBuilder('u')
            ->andWhere('u.email LIKE :query OR u.username LIKE :query ')
            ->andWhere('u.roles NOT LIKE :role')
            ->setParameter('query', '%'.$query.'%')
            ->setParameter('role', '%ADMIN%')
            ->setMaxResults($limit)
            ->getQuery()
            ->getResult();

I dump at least one object from the database that should be matched :

  'id' => string '8' (length=1)
  'username' => string 'mike' (length=4)
  'email' => string 'm...@m.com' (length=7)
  'roles' => string '["ROLE_ADMIN","ROLE_USER"]' (length=26)

In the profiler I check the executed query :


SELECT u0_.id AS id_0, u0_.username AS username_1, u0_.email AS email_2, 
> u0_.roles AS roles_3, u0_.password AS password_4, u0_.name AS name_5 FROM 
> user u0_ WHERE (u0_.email LIKE '%mik%' OR u0_.username LIKE '%mik%') AND 
> u0_.roles NOT LIKE '%ADMIN%' LIMIT 5;


I expect at least 1 result which corresponds to the provided row in my 
database but nothing is returned and I cannot figure out what is wrong with 
the query.

I also tried other ways to query, like using expr()->notLike() but with the 
same results
        $qb = $this->createQueryBuilder('u');
        $users = $qb
                ->andWhere('u.email LIKE :query OR u.username LIKE :query')
                ->setParameter('query', '%'.$query.'%')
                ->andWhere( 
                        $qb->expr()->notLike('u.roles', $qb->expr()->literal
('%ADMIN%'))
                        )
                ->setMaxResults($limit)
                ->getQuery()
                ->getResult();
        
        return $users;

So Is it the query or something else is wrong ?


-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to doctrine-user+unsubscr...@googlegroups.com.
To post to this group, send email to doctrine-user@googlegroups.com.
Visit this group at https://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to