Symfony 是否可以在条令查询中集成if语句?

Symfony 是否可以在条令查询中集成if语句?,symfony,doctrine,Symfony,Doctrine,到目前为止,我有两个类似的问题: 当用户是ROLE\u REDAC时,我使用的第一个 $qb = $this->createQueryBuilder('a'); $qb->LeftJoin('a.ArticlePhrases','ap') ->addSelect('ap') ->where( $qb->expr()->andX( $qb->ex

到目前为止,我有两个类似的问题:

当用户是ROLE\u 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(//...
                       );
当用户是角色\ u ADMIN时的第二个

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

差别不大。是否可以从控制器调用同一存储库函数,并且该函数是否适应实际用户是ROLE\u REDAC还是ROLE\u ADM?如果是,我怎么做呢?

我还没有测试过,但应该可以工作

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);

将参数(用户角色)传递给自定义存储库函数,然后根据用户角色添加或不添加dql代码。就这么简单!你能提供一个唐卡利斯托的例子吗?那太好了