public function buildQuery(QueryConfigInterface $query, TableInterface $table) { parent::buildQuery($query, $table); $params = $table->getOption('rows_params'); $query->setSelect(array_values($params)); $query->setLimit(0); $query->setPage(1); }
public function buildQuery(QueryConfigInterface $query, TableInterface $table) { parent::buildQuery($query, $table); $_query = $table->getOption('_query'); $params = $table->getOption('rows_params'); if ($table->getOption('allow_select')) { if (!isset($_query['selectedRows'])) { throw new \InvalidArgumentException('selectedRows is required'); } if (count($_query['selectedRows']) === 0) { $query->setValid(false); return; } if (count($params) === 1) { $name = key($params); $param = reset($params); $selectedRowIds = array(); foreach ($_query['selectedRows'] as $row) { if (!isset($row[$name])) { throw new \UnexpectedValueException('Parameter "' . $name . '" not found.'); } $selectedRowIds[] = $row[$name]; } $orX = new \Doctrine\ORM\Query\Expr\Orx(); $orX->add($param . ' in (:selectedRowIds)'); $query->setConstraints($orX)->addParameter('selectedRowIds', $selectedRowIds); } else { $reversedParams = array_flip($params); if (count($params) !== count($reversedParams)) { throw new \RuntimeException('rows_params values must be unique'); } $query->setParameters(array()); $orX = new \Doctrine\ORM\Query\Expr\Orx(); $selectedRows = array_values($_query['selectedRows']); foreach ($selectedRows as $i => $row) { $row = $this->type->resolveParams($reversedParams, $row); $andX = new \Doctrine\ORM\Query\Expr\Andx(); foreach ($row as $param => $value) { $andX->add($param . ' = :' . $reversedParams[$param] . $i); $query->addParameter($reversedParams[$param] . $i, $value); } $orX->add($andX); } $query->setConstraints($orX); } } }