将数组传递给查询时出现语义错误

时间:2013-10-30 19:16:22

标签: php sql doctrine-orm doctrine dql

我有一个数组,其中包含我已准备好将其传递给查询的条件:

数组:

('u.registered = 1','u.active = 0', 'u.gender = M')

当我传递给查询时,它使用数字比较,但不使用varchar,即M.“错误出现在”性别“中,它表示这是一个语义错误。我假设是因为我没有使用expr() - > literal('M'),但我不能这样做,因为查询是“已经构建”..

还有另一种方法,所以我不必重新编码吗?

这是代码:

public function customR($data){
    // var_dump($data);die();
    $this->qb = $this->em->createQueryBuilder();
    $andX = $this->qb->expr()->andX();

    $this->qb->select('u')
    ->from('models\User','u');

    foreach ($data as $value){
        $andX->add($value);

            }

    $this->qb->add('where', $andX);


    $query = $this->qb->getQuery();
    // var_dump($query);die();
    $obj = $query->getResult();
    var_dump($obj);die();
            if (!empty($obj)){
        return $obj;

        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

我发现无法做到这一点,所以我只是稍微改了一下。

我发送一个包含一些元素的数组,只是为了引用存在和不存在的内容。

所以,在我的数据服务中,我创建了一个函数和该函数的片段来解决我的问题就是这样做:

if($key == 'gender'){
    foreach($value as $key=>&$v){
    $condition = ('u.gender = '. $this->qb->expr()->literal($v));
    $orX->add($condition);
            }
        }