如何解决这是使用Doctrine2的WHERE IN表达式处理有序数组的正确方法吗?
| 使用Zend Lucene Search,我将返回一个按相关性排序的ID列表,这些ID映射到将从数据库中获取的博客记录。 这是使用Doctrine2的WHERE IN表达式处理数组的正确方法:$dql = \"SELECT b FROM BlogPost WHERE b.id IN (\" . implode(\',\',$ids) . \")\";
$query = $em->createQuery($dql);
...
还是有更好的方法可以将实际的“ 1”数组作为参数传递给查询?
此外,Zend Search会根据相关性返回ID数组。使用上述技术是否可以保留检索博客文章的相关性顺序?
解决方法
如果感觉更好,可以使用ExpressionBuilder。
$ex = $em->getExpressionBuilder();
$dql = \'SELECT b FROM BlogPost b WHERE \' . $ex->in(\'b.id\',$ids));
$query = $em->createQuery($dql);
function cmp($a,$b) {
global $ids;
return (array_search($a->getId(),$ids) < array_search($b->getId(),$ids)) ? -1 : 1;
}
usort($res,\'cmp\');
它比较干净,但与屏幕后面的功能相同。
,您应该通过setParameter()函数粘贴$ ids数组,因为这是最佳做法:
$query = $this->_em->createQuery(\'SELECT b FROM BlogPost WHERE b.id IN (?1)\');
$query->setParameter(1,implode(\',\',$ids));
我认为IN语句不会保留传递的ID的顺序,因为IN会匹配第一个找到的$ id,而不取决于顺序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。