Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
 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);
         }
     }
 }