我的项目中有很多关系(user_role,成绩,user_role_grades)。但是我也有一个要求,不要从我的数据库中删除任何数据。因此,我在表中添加了一个状态列,该列连接2个表以创建多对多关系。现在我要

 $userRole->getGrades()

仅获取那些在联合表(user_role_grades)中没有状态“0”的记录。对于这些,我正在尝试使用主义sql过滤器。
namespace Bis\MpBundle\Filter;
use \Doctrine\ORM\Mapping\ClassMetaData;

class UserRoleGradeFilter extends \Doctrine\ORM\Query\Filter\SQLFilter
{
    public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
    {
        if("Bis\DefaultBundle\Entity\UserRoleGrade" == $targetEntity->name){

            return $targetTableAlias . '.status != 0';
        }

        return '';
    }
}

因此,它针对Bis\DefaultBundle\Entity\UserRole而被调用,而对于Bis\DefaultBundle\Entity\UserRoleGrade实体则不被调用。有任何想法吗?

还是您有其他想法,我该怎么做?

最佳答案

我认为这是不可能的,因为它直接附加了SQL。
即使您尝试使用SQL注入(inject)之类的方法,也可以:

return $targetTableAlias . '.status != 0)) LEFT join the_other_table ON  '
. $targetTableAlias . '.grades HAVING the_other_table.status = 0 ((';

它可能会在像(())这样的语句上崩溃

关于php - 在多对多关系中应用准则SQL过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12262164/

10-14 15:18
查看更多