2017-07-02 93 views
1

我需要構建一個查詢,返回所有獲得'ROLE_ADMIN'作爲角色的用戶(我使用FOSUserBundle)。使用對象方法的Doctrine querybuilder

我已經試過這個,但它不起作用,它拋出我「警告:get_class()期望參數1是對象,布爾給定」。

public function getAdminQueryBuilder() { 

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

請注意,沒有where條件,它的工作原理,我得到所有用戶在dabatase返回。

回答

2

這是你應該如何調用where

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

讓我知道是否有問題。


編輯#2

試試這個:

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

,我認爲它應該工作,但不能肯定。

+0

感謝您的回答,但它會拋出「[語義錯誤]第0行,第54列靠近'hasRole =:r':錯誤:類AppBundle \ UserBundle \ Entity \ User沒有字段或名爲hasRole的關聯」。看起來它不認爲hasRole是一個函數? – Mit

+0

您是否已經考慮過'@Security(「has_role('ROLE_ADMIN')」)'路由註釋[如此處所述](https://symfony.com/doc/current/security.html#securing-controllers-and-other -碼)? –

+0

是的,該消息意味着在用戶實體中沒有'hasRole'字段。 –

相關問題