2012-09-04 2 views
4

내 프로젝트 (user_role, grades, user_role_grades)에 많은 관계가 있습니다. 그러나 나는 또한 db에서 데이터를 삭제하지 않아도됩니다. 그래서, 나는 많은 관계를 생성하기 위해 2 개의 테이블을 연결하는 테이블에 상태 열을 추가했습니다. 지금 원한다면많은 관계에서 doctrine sql 필터 적용

$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 ''; 
    } 
} 

그래서, 그것은 비스 \ DefaultBundle \ 법인 \ UserRole에 대한,하지만 비스에 대한 \ DefaultBundle \ 엔티티 \ UserRoleGrade의 실체라고합니다. 누구에게 어떤 아이디어가 있습니까?

다른 아이디어가 있습니까? 어떻게 할 수 있습니까?

+0

처럼 문에 붕괴 것? 나는 비슷한 일을하려고 노력 중이며 해결책을 제시하지도 않았다. –

답변

1

SQL을 직접 추가하기 때문에 가능하지 않다고 생각합니다. 당신은 SQL 주입과 같은 s 번째 시도를하려는 하더라도 :

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

을 아마 당신이에 대한 해결책을 찾았나요 (())

관련 문제