gpt4 book ai didi

php - 嵌套 like 子句中的 Doctrine 值数组

转载 作者:行者123 更新时间:2023-11-28 23:44:35 27 4
gpt4 key购买 nike

我正在尝试更新 Doctrine 查询以接受要在字段上搜索的值数组。我需要它们是不区分大小写的匹配项,所以我使用 like 从句,否则我可以只使用 in 这会使事情变得更简单。我想要结束的是一个像这样的查询:

"SELECT * FROM tableName t WHERE (t.option LIKE "option1" OR t.option LIKE "option2" OR t.option LIKE "option3"); 

所以我尝试了以下方法:

function getItems( $options = array() ) {

$qb = $this->_em->createQueryBuilder();
$qb->from('tableName', 't')
->select('t');

$conditions = $qb->expr()->orX();
foreach ($options as $option) {
$conditions->add($qb->expr()->like('option', $option));
}
$qb->andWhere($conditions);
}

return $qb->getQuery()->getArrayResult();
}

getItems( array('option1','option2','option3') );

但是这些值不会被转义,所以您最终会遇到如下抛出错误的查询:

SELECT * FROM tableName t WHERE (t.option LIKE option1 OR t.option LIKE option2 OR t.option LIKE option3)

这通常是您使用命名参数的地方,例如:

$qb->expr()->like('option', ':option');
$qb->setParameter( 'option', $option );

但是您不能使用值数组多次设置相同的参数名称。我可能遗漏了一些明显的东西,有点像 Doctrine 的新手。有什么想法吗?

最佳答案

你应该使用文字表达式:

$conditions->add($qb->expr()->like('option', $qb->expr()->literal($option)));

关于php - 嵌套 like 子句中的 Doctrine 值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33820680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com