是否可以在教义查询中集成if语句?

时间:2015-02-19 13:51:48

标签: symfony doctrine

到目前为止,我有两个类似的查询:

用户为ROLE_REDAC时使用的第一个

$qb = $this->createQueryBuilder('a');
    $qb->LeftJoin('a.ArticlePhrases','ap')
        ->addSelect('ap')
        ->where(
                $qb->expr()->andX(
                    $qb->expr()->eq('ap.order', '?1'),
                    $qb->expr()->eq('a.author', '?2')
                    )
                )
        ->setParameters(//...
                       );

用户为ROLE_ADMIN时的第二个

$qb = $this->createQueryBuilder('a');
    $qb->LeftJoin('a.ArticlePhrases','ap')
        ->addSelect('ap')
        ->where(
                $qb->expr()->andX(
                    $qb->expr()->eq('ap.order', '?1')
                    )
                )
        ->setParameters(...
                ));

没有太大区别。是否可以从控制器调用相同的存储库功能,并且该功能适应实际用户是否为ROLE_REDAC或ROLE_ADM?如果是的话我该怎么做?

1 个答案:

答案 0 :(得分:2)

我还没有对它进行过测试,但是应该可以使用

class MyCustomRepository extends EntityRepository
{
    public function myCustomFunction($user_role)
    {
        $qb = $this->createQueryBuilder('a');
        if ($user_role == 'ROLE_REDAC') {
            $where_dql_expr = $qb->expr()->andX(
                $qb->expr()->eq('ap.order', '?1'),
                $qb->expr()->eq('a.author', '?2')
                );
            $qb->setParameters(//....); 
        }
        else if ($user_role == 'ROLE_ADMIN') {
            $where_dql_expr = $qb->expr()->andX(
                $qb->expr()->eq('ap.order', '?1')
            );
            $qb->setParameters(//....); 
        }

        $qb->LeftJoin('a.ArticlePhrases','ap')
           ->addSelect('ap')
           ->where($where_dql_expr)
           ->//and so on
    }
}

当然进入你的控制器你必须通过正确的参数调用它

$role = //retrieve role
$custom_repo = $this->getDoctrine()
    ->getManager()
    ->getRepository('YourBundleName:MyCustomEntity');
$custom_repo->myCustomFunction($role);