2017-07-02 6 views
1

Ich muss eine Abfrage erstellen, die alle Benutzer zurückgibt, die 'ROLE_ADMIN' als Rolle erhalten haben (ich verwende FOSUserBundle dafür).Doctrine QueryBuilder, das die Methode des Objekts verwendet

Ich habe das bereits versucht, aber es funktioniert nicht, es wirft mich "Warnung: get_class() erwartet Parameter 1 zu Objekt, boolean gegeben".

public function getAdminQueryBuilder() { 

     return $this->createQueryBuilder('u') 
       ->where('u.hasRole(:role)', true) 
       ->setParameter('role', 'ROLE_ADMIN') 
     ; 
    } 

Beachten Sie, dass ohne die Bedingung, es funktioniert und ich habe alle Benutzer in Dabatase zurückgegeben.

Antwort

2

Dies ist, wie Sie die where nennen sollte:

public function getAdminQueryBuilder() { 
    return $this->createQueryBuilder('u') 
       ->where('u.hasRole = :role') 
       ->setParameter('role', 'ROLE_ADMIN') 
    ; 
} 

Lassen Sie mich wissen, wenn es Probleme gibt.


EDIT # 2

Versuchen Sie stattdessen:

public function getAdminQueryBuilder() { 
    return $this->createQueryBuilder('u') 
       ->where('u.roles LIKE :roles') 
       ->setParameter('roles', '%ROLE_ADMIN%') 
    ; 
} 

Ich denke, es sollte funktionieren, aber nicht sicher.

+0

Vielen Dank für Ihre Antwort, aber es wirft "[Semantical Error] Zeile 0, Spalte 54 in der Nähe 'hasRole =: r': Fehler: Klasse AppBundle \ UserBundle \ Entity \ Benutzer hat kein Feld oder eine Assoziation mit dem Namen hasRole". Sieht so aus, als ob es hasRole nicht als Funktion betrachtet? – Mit

+0

Haben Sie bereits '@Security (" has_role ('ROLE_ADMIN') ")' Routing-Annotation [wie hier beschrieben] (https://symfony.com/doc/current/security.html#securing-controllers-and-other) berücksichtigt -Code)? –

+0

Ja, diese Nachricht bedeutet, dass in der Entität "User" kein 'hasRole'-Feld definiert ist. –

Verwandte Themen