获取字段类型
问题描述:
我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();
}
我想检查字段的类型,然后使用搜索LIKE%字%,如果字段类型为字符串(或文本)和以及其他领域。
你知道哪个函数返回symfony仓库中的fieldType吗?
答
我想你正在寻找PHP的getType()
函数。有关如何使用它的更多信息,请参阅PHP docs。
$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功能,你可以找到 here.
不完全是。我想获得有关表格列类型的信息。 – kvaje