예제 #1
0
 /**
  * Builds filtering expression by tags ids and entity class name
  *
  * @param OrmFilterDatasourceAdapter $ds
  * @param array                      $data
  *
  * @param string                     $entityClassParam
  *
  * @return bool|Func
  */
 protected function buildFilterExpr(OrmFilterDatasourceAdapter $ds, array $data, $entityClassParam)
 {
     $expr = false;
     $qb = $ds->getQueryBuilder();
     $entityIdAlias = $this->get(FilterUtility::DATA_NAME_KEY);
     $taggingAlias = $ds->generateParameterName('tagging');
     $tagAlias = $ds->generateParameterName('tag');
     $subQueryDQL = $qb->getEntityManager()->getRepository('OroTagBundle:Tagging')->createQueryBuilder($taggingAlias)->select($taggingAlias . '.recordId')->join($taggingAlias . '.tag', $tagAlias)->where(sprintf('%s.entityName = :%s', $taggingAlias, $entityClassParam))->andWhere($qb->expr()->in($tagAlias . '.id', $data['value']))->getDQL();
     switch ($data['type']) {
         case DictionaryFilterType::TYPE_IN:
             $expr = $ds->expr()->in($entityIdAlias, $subQueryDQL);
             break;
         case DictionaryFilterType::TYPE_NOT_IN:
             $expr = $ds->expr()->notIn($entityIdAlias, $subQueryDQL);
             break;
         default:
             break;
     }
     return $expr;
 }