相关疑难解决方法(0)

带有数组值的Doctrine DBAL setParameter()

我正在使用doctrine DBAL,并且由于queryBuilder而导致SQL查询出现问题.

$builder = $this->getConnection()->getQueryBuilder();
$builder->select(['id','name','type'])
         ->from('table')
         ->where('id='.(int)$value)
         ->setMaxResults(1);
$builder->andWhere($builder->expr()->in('type', ['first','second']));

echo(builder->getSQL());

$data = $builder->execute()->fetchRow();
Run Code Online (Sandbox Code Playgroud)

并获得SQL

SELECT id, name, type FROM table WHERE (id=149) AND (type IN (first,second)) LIMIT 1
Run Code Online (Sandbox Code Playgroud)

这就是问题,我需要(输入IN(第一,第二))被编码为字符串(类型IN('first','second'))

如何以正确的方式使用查询构建器?

php mysql doctrine symfony dbal

11
推荐指数
1
解决办法
1万
查看次数

使用IN Clause进行Symfony2.3原始sql查询

我正在尝试使用doctrine entitymanager为IN子句运行原始sql查询,如下所示.

    $idSArray  = Array ( [0] => 1 [1] => 2 )

    $stmt = $this->getDoctrine()->getEntityManager()
    ->getConnection()
    ->prepare('SELECT t1.id , t1.name , t2.start_date , t2.end_date 
    FROM table1 t1 , table2 t2 
    WHERE t1.id = t2.matchId AND  t1.id IN (:ids)');


    $params = array(
      'ids'  => implode( ",", $idSArray )
    );
    $stmt->execute($params);
    $results = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)

但我只得到Id = 1的结果.如果我将WHERE IN条件硬编码为

     WHERE t1.id = t2.matchId AND  t1.id IN (1,2)');
Run Code Online (Sandbox Code Playgroud)

然后获得两个ID的结果.谁能告诉我在传递$ params数组时我做错了什么.我还打印了输出1,2的内爆结果.所以我无法找到错误以及使用IN子句执行原始sql查询的方法.

php mysql symfony

2
推荐指数
1
解决办法
7399
查看次数

标签 统计

mysql ×2

php ×2

symfony ×2

dbal ×1

doctrine ×1