/** * 指定Criteria 查询数据; SQL语句查询数组,返回为数据数组,不提供实体绑定; * @param $criteria * @return 绑定实体后的数组对象; */ public function findAll($criteria) { //是否使用分页器 $dataPager = $criteria->getDataPager(); if (is_object($dataPager)) { $totalNum = 0; $fileds = $criteria->getFileds(); $orderEntries = $criteria->getOrderEntries(); $criteria->cleanOrder(); $criteria->cleanFileds(); $entityConf = $criteria->getTableEntity()->getConfig(); $criteria->setFileds(explode(",", $entityConf['id'])); $criteria->addProjection(Projections::rowCount()); $rs1 = $criteria->_array(false); $totalNum = @current(@current($rs1)); $dataPager->setTotalNum($totalNum); $criteria->cleanProjection(); $criteria->setFileds($fileds); $criteria->setOrders($orderEntries); $criteria->setFirstResult($dataPager->getFirstResult()); $criteria->setFetchSize($dataPager->getPageSize()); } return $criteria->_array(); }
/** * 设定分页器; * @param DataPager $dataPager 分页器 * @param String $relationEntiyName //指定关联对象名称; */ public function setDataPager($dataPager, $relationEntiyName = null) { if ($relationEntiyName) { $cfg = $this->getConfig(); foreach ($cfg['relations'] as $k => $relation) { if ($relation['name'] == $relationEntiyName) { $crit = null; if (isset($cfg['relations'][$k]['criteria'])) { $crit = $cfg['relations'][$k]['criteria']; } else { if ('my\\bq\\criterion\\MongoCriteriaImpl' == get_class($this->criteria)) { $crit = new MongoCriteriaImpl(new $relation['class']()); } else { $crit = new CriteriaImpl(new $relation['class']()); } } $crit->setDataPager($dataPager); //设定分页器 $crit->addProjection(Projections::rowCount('total')); $cfg['relations'][$k]['criteria'] = $crit; break; } } $this->setConfig($cfg); } else { $this->dataPager = $dataPager; } }
public function findAndModify($criteria, $modifier) { //是否使用分页器 $dataPager = $criteria->getDataPager(); if (is_object($dataPager)) { $totalNum = 0; $fileds = $criteria->getFileds(); $criteria->cleanFileds(); $criteria->addProjection(Projections::rowCount()); $rs1 = $criteria->_array(false); $totalNum = @current(@current($rs1)); $dataPager->setTotalNum($totalNum); $criteria->cleanProjection(); $criteria->setFileds($fileds); $criteria->setFirstResult($dataPager->getFirstResult()); $criteria->setFetchSize($dataPager->getPageSize()); } if ($modifier != null) { $criteria->setModifier($modifier); } try { $rs = $criteria->_array(true); } catch (Exception $e) { throw $e; } return $rs; }