如何与学说标准相结合和位置



我想用学说Criteria创建一个相当复杂且灵活的查询。我有一个andWhere,每个查询中都包含在每个查询中,但是(取决于输入(我想添加一些 orWhere的光学参数。

$criteria = Criteria::create();
/* Add Criteria for last 55 Days (every query) */
$criteria->where(Criteria::expr()->gte('gameCreation', $long));
/* Gather optional Params */
$orxList = array();
/* Optional Criteria */
if (!empty($champions)) {
    foreach ($champions as $c) {
        $orxList[] = Criteria::expr()->eq('champion',$c);
    }
}
...
$criteria->andWhere(Criteria::expr()->orX($orxList));

这导致例外:

没有给出复合表达的表达。

我将如何将此类标准与初始where子句相结合?

我遇到了一个类似的问题,并这样解决了:

use DoctrineCommonCollectionsExprCompositeExpression;
...
/* Gather optional Params */
$orxList = array();
/* Optional Criteria */
if (!empty($champions)) {
    foreach ($champions as $c) {
        $orxList[] = Criteria::expr()->eq('champion', $c);
    }
}
...
$criteria->andWhere(new CompositeExpression(CompositeExpression::TYPE_OR, $orxList));

您看到CompositeExpression的构造函数接受了一系列表达式,这会生成正确的查询。

您应该使用Expr类中的orX()进行此示例:

$orX = $exp->orX();
$index = 0;
foreach ($champions as $c) {
    $paramName = ':param_' . $index;
    $orX->add($qb->expr()->eq('u.column', $paramName));
    $qb->setParameter($paramName, $c);
    $index++;
}

但是,如果您的数组只是以相同方式比较的平弦/对象,请考虑在[]表达式中使用Where。

最新更新