在Symfony2存储库中获取字段类型

在Symfony2存储库中获取字段类型,symfony,doctrine,repository,fieldtype,Symfony,Doctrine,Repository,Fieldtype,我在symfony存储库中有函数 public function getAllSites($criteria = null) { $qb = $this->createQueryBuilder('s') ->select('s') ->orderBy('s.root', 'ASC') ->addOrderBy('s.lft', 'ASC');

我在symfony存储库中有函数

        public function getAllSites($criteria = null)
{
    $qb = $this->createQueryBuilder('s')
               ->select('s')
               ->orderBy('s.root', 'ASC')
               ->addOrderBy('s.lft', 'ASC');

        if($criteria !== null):
            foreach ($criteria as $field => $value):
                if (!$this->getClassMetadata()->hasField($field)):
                    continue; // Make sure we only use existing fields (avoid any injection)                        
                endif;
                $qb ->andWhere($qb->expr()->eq('s.'.$field, ':s_'.$field))
                    ->setParameter('s_'.$field, $value);
            endforeach;
        endif;

    return $qb->getQuery()->getResult();
} 
我想检查字段的类型,如果字段类型是字符串(或文本),则使用类似%word%的搜索,其他字段使用andWhere


您知道symfony存储库中的哪个函数返回fieldType吗?

我想您正在寻找PHP的
getType()
函数。有关如何使用它的更多信息,请参阅

$var = "abc";
$type = getType($var)
// returns 'string'

我现在找到了答案。函数是$this->getClassMetadata()->getTypeOfField($field)

例如:

public function getAllSites($criteria = null)
{
    $qb = $this->createQueryBuilder('s')
               ->select('s')
               ->orderBy('s.root', 'ASC')
               ->addOrderBy('s.lft', 'ASC');

        if($criteria !== null):
            foreach ($criteria as $field => $value):
                if (!$this->getClassMetadata()->hasField($field)):
                    continue; // Make sure we only use existing fields (avoid any injection)                        
                endif;                    
                if ($this->getClassMetadata()->getTypeOfField($field) === 'string'
                    || $this->getClassMetadata()->getTypeOfField($field) === 'text'):
                    $qb ->andWhere($qb->expr()->like('s.'.$field, ':s_'.$field))
                        ->setParameter('s_'.$field, '%'.$value.'%');    // search LIKE %value%
                else:    
                    $qb ->andWhere($qb->expr()->eq('s.'.$field, ':s_'.$field))
                        ->setParameter('s_'.$field, $value);
                endif;
            endforeach;
        endif;

    return $qb->getQuery()->getResult();
}
有关ClassMetadata的更多函数,您可以找到
不完全是这样。我想获取有关表列类型的信息。