/**
* @param Builder $queryBuilder
* @param ConditionNodeInterface $node
* @param Expr $expr
* @return null
*/
protected function computeExpression(Builder $queryBuilder, ConditionNodeInterface $node, Expr $expr = null)
{
if (count($node->getFields()) == 0 && count($node->getChildren()) == 0) {
return null;
}
$method = $node->getOperator() === ConditionNodeInterface::EXPR_AND ? 'addAnd' : 'addOr';
$expression = null === $expr ? $queryBuilder : $expr;
$count = 0;
foreach ($node->getFields() as $condition) {
if (null !== $condition) {
/** @var ConditionInterface $condition */
$expression->{$method}($condition->getExpression());
$count++;
}
}
foreach ($node->getChildren() as $child) {
$subExpr = $queryBuilder->expr();
$subCount = $this->computeExpression($queryBuilder, $child, $subExpr);
if ($subCount > 0) {
$expression->{$method}($subExpr);
$count++;
}
}
return $count;
}