Symfony 是否可以在条令查询中集成if语句?
到目前为止,我有两个类似的问题: 当用户是ROLE\u REDAC时,我使用的第一个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
$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代码。就这么简单!你能提供一个唐卡利斯托的例子吗?那太好了