使用jointure获取用户对类别和论坛的权限

时间:2016-09-26 08:15:30

标签: php mysql symfony

我使用Symfony 3,我正在创建自己的论坛,目前我处于权限状态。

My table

正如你所看到的,我的用户可以有很多组,所以我想得到我的查询,我的类别列表(带有权限)和他们的论坛(每个用户的权限)。我想在他的屏幕上得到最好的效果,在我的屏幕中,(user_group == 2)没有烫发,而(user_group == 1)拥有所有的烫发。我希望得到所有用户线和组,并在每次自动化时使用MAX(can_ *)来了解他能做什么。

(我不希望获得更好的用户群组权限,而是每个字段的最佳权限)

Other example with my category_id == 1

我会得到所有真实的结果

我当前的查询如下:

public function getCategoriesWithForums(\UserBundle\Entity\User $user)
{
    $ids = array();
    foreach ($user->getGroups() as $group) 
    {
        $ids[] = $group->getId();
    }

    return $this->createQueryBuilder('c')
        // permissions catégory
        ->innerJoin('c.permissions', 'cp')->addSelect('cp, MAX(cp.canSee), MAX(cp.canEnter), MAX(cp.canPost), MAX(cp.canReply), MAX(cp.canEdit), MAX(cp.canDelete)')
            ->andWhere('cp.userGroup IN (:ids)')->setParameter('ids', implode(',', $ids))

        ->innerJoin('c.forums', 'f')->addSelect('f')
        // permissions forums
        ->innerJoin('f.permissions', 'fp')->addSelect('fp, MAX(fp.canSee), MAX(fp.canEnter), MAX(fp.canPost), MAX(fp.canReply), MAX(fp.canEdit), MAX(fp.canDelete)')
            ->andWhere('fp.userGroup IN (:ids)')->setParameter('ids', implode(',', $ids))

        ->leftJoin('f.lastPost', 'lastPost')->addSelect('lastPost')
        ->leftJoin('lastPost.topic', 'topicLastPost')->addSelect('topicLastPost')

        ->orderBy('c.position', 'ASC')
        ->addOrderBy('f.position', 'ASC')
        ->getQuery()->getResult();
}

Symfony 3生成的查询:(需要10个声誉):pastebin dot com / 0vX9ej2a

最后,我得到了错误 ..

  

SQLSTATE [42000]:语法错误或访问冲突:1140聚合   没有GROUP BY的查询

的表达式#13
 SELECT list contains nonaggregated column 'gtav.f2_.id'; this is incompatible with sql_mode=only_full_group_by

你有什么想法解决这个问题并获得正确的结果吗? 我希望你能帮我解决这个问题

0 个答案:

没有答案