2016-01-18 36 views
0

我正在使用Symfony Sonata用戶管理包進行用戶管理。我已創建的另一個實體LoginHistoryOneToMany關係UserLoginHistorySymfony2原則查詢從3個表中獲取數據

之間我必須來顯示使用KNP分頁程序捆綁與他們的組名的所有用戶的列表(通常只屬於一個組),詳細登錄歷史。

我寫了這個查詢,但沒有得到用戶的組數據。

$query = $repository->createQueryBuilder('u') 
        ->join('PNCLogBundle:LoginHistory', 'log', 'WITH log.User = u.id') 
        ->innerJoin('u.groups', 'g') 
        ->andwhere('g.id = u.group') 
        ->where('u.roles LIKE :roles') 
        ->setParameter('roles', '%"ROLE_STAFF"%') 
        ->getQuery(); 

回答

0

There are 2 types of JOINs: 「Regular」 Joins and 「Fetch」 Joins.

你需要的是一個取聯接。你可以閱讀這個in the doctrine2 documentation。解決方法很簡單,只需添加g到您的SELECT子句中的查詢生成器:

$query = $repository->createQueryBuilder('u') 
        ->select('u', 'g') 
        ->join('PNCLogBundle:LoginHistory', 'log', 'WITH log.User = u.id') 
        ->innerJoin('u.groups', 'g') 
        ->andwhere('g.id = u.group') 
        ->where('u.roles LIKE :roles') 
        ->setParameter('roles', '%"ROLE_STAFF"%') 
        ->getQuery(); 

您還可以使用addSelect方法:

$query = $repository->createQueryBuilder('u') 
        ->addSelect('g') 
        ->join('PNCLogBundle:LoginHistory', 'log', 'WITH log.User = u.id') 
        ->innerJoin('u.groups', 'g') 
        ->andwhere('g.id = u.group') 
        ->where('u.roles LIKE :roles') 
        ->setParameter('roles', '%"ROLE_STAFF"%') 
        ->getQuery(); 
+0

了錯誤'錯誤:預期文字,有「加入'' –

+0

這與我在答案中添加的內容無關,我認爲這是因爲你的連接子句' - >連接('PNCLogBundle:LoginHistory','log','WITH log.User = u.id')。 '... [檢查谷歌,你會發現足夠的答案來解決](https://www.google.com/webhp#q=Error%3A+Expected+Literal%2C+got+'JOIN')。你應該做一些像' - > join('u.logs','log')' – Wilt