获取字段类型

问题描述:

我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' 
+0

不完全是。我想获得有关表格列类型的信息。 – kvaje

我现在找到了答案。该函数是$ 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.