Doctrine orm Symfony2 Doctrine2:querybuilder错误查询

Doctrine orm Symfony2 Doctrine2:querybuilder错误查询,doctrine-orm,symfony-2.1,Doctrine Orm,Symfony 2.1,对于Symfony2和Doctrine2,我的实体存储库中有一个功能,可以在表单提交后搜索实体。输入是数组$get,其中包含$get['name']='aname'等表单字段 我的问题是,当我用一个id或一个id和一个名称进行请求时,只需要一个名称就可以了,我的所有实体都是匹配的,因为生成的查询没有where子句 这是我的密码: public function search(array $get, $flag = False){ /* Indexed column (used for fast

对于Symfony2和Doctrine2,我的实体存储库中有一个功能,可以在表单提交后搜索实体。输入是数组$get,其中包含$get['name']='aname'等表单字段

我的问题是,当我用一个id或一个id和一个名称进行请求时,只需要一个名称就可以了,我的所有实体都是匹配的,因为生成的查询没有where子句

这是我的密码:

public function search(array $get, $flag = False){
/* Indexed column (used for fast and accurate table cardinality) */
$alias = 'd';

/* DB table to use */
$tableObjectName = 'mysiteMyBundle:DB';

$qb = $this->getEntityManager()
  ->getRepository($tableObjectName)
  ->createQueryBuilder($alias)
  ->select($alias.'.id');

$arr = array();

//Simple array, will grow after problem solved
$numericFields = array(
   'id');

$textFields = array(
    'name');


while($el = current($get)) {
    $field = key($get);

    if ( $field == '' or $field == Null or $el == '' or $el == Null ) {
        next($get);
    }

    if ( in_array($field,$numericFields) ){
        if ( is_numeric($el) ){
            $arr[] = $qb->expr()->eq($alias.".".$field, $el);
        }
    } else {
        if ( in_array($field,$textFields) ) {
            $arr[] = $qb->expr()->like($alias.".".$field, $qb->expr()->literal('%'.$el.'%') );
        }
    }

    next($get);
}

if(count($arr) > 0) $qb->andWhere(new Expr\Orx($arr));
else unset($arr);

$query = $qb->getQuery();

if($flag)
  return $query;
else
  return $query->getResult();
}
仅使用名称(例如“myname”)输入生成的查询为:

SELECT d0_.id AS id0 FROM DB d0_
应该是:

SELECT d0_.id AS id0 FROM DB d0_ WHERE d0_.name LIKE '%myname%'
我的代码怎么了


谢谢

我不知道它是否相关,但不要使用“OR”或“OR”和“AND”运算符,因为它们的含义与经典的“&&”或“||”不同。碳纤维

因此,首先,将“AND”替换为“&&”,将“OR”替换为“| |”。

您应该使用


哦,我不知道。非常感谢。我在我的控制器中为表单字段添加了'data'=>Null,所以现在它们总是默认设置为Null。但是它什么也不改变:(也把两个“if”放在一个条件语句中:“if(!empty($field)&!empty($el)){”,但不改变任何东西。
$query->where('id = :id')->setParameter('id', $id);