在Symfony2存储库中获取字段类型
我在symfony存储库中有函数在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');
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的更多函数,您可以找到
不完全是这样。我想获取有关表列类型的信息。