Я хотел бы получить всех администраторов среди пользователей (т.е. с ролью ROLE_ADMIN).
Роль атрибута "json", поэтому я не могу использовать "like" или "="operator.
Я реализовал управление пользователями с помощью MakerBundle в проекте symfony4 (make: user затем make: команды auth).
class User implements UserInterface
{
/**
* @ORM\Column(type="json")
*/
private $roles = [];
}
class UserRepository extends ServiceEntityRepository
{
public function findByRole($role){
return $this->createQueryBuilder('u')
->where("u.roles like :role ")
->setParameter('role', '%'.$role.'%')
->getQuery()
->getResult();
}
}
class MyController extends AbstractController
{
public function edit(UserRepository $userRepository): Response
{
$admins = $userRepository->findByRole('ROLE_ADMIN');
dump($admins);
exit;
}
}
Когда я вызываю findByRole('ROLE_ADMIN')
в контроллере,сообщение об ошибке:
SQLSTATE[42883]: Undefined function: 7 ERREUR: l'opérateur n'existe pas : json ~~ unknown
LINE 1: ...AS reset_token_5 FROM itibr_user i0_ WHERE i0_.roles LIKE $1
Я также пытался использовать функции scienta / doctrine-json (https://packagist.org/packages/scienta/doctrine-json-functions),, но не смог это исправить.