我正在使用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'))
如何以正确的方式使用查询构建器?
我正在尝试使用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查询的方法.