/**
  * 设定分页器;
  * @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;
     }
 }
Esempio n. 2
0
 /**
  * 可以指定条件筛选范本来查询实体;
  * @param Object $entity 需要查询的实体对象
  * @param $example 指定条件样本
  * @param array<Order> $orders  指定排序规则; 可以为 Order对像的数组;
  * @param DataPager $dataPager 数据分页器
  * @param array<Translater> $translaters 数据转义器
  * @return array<Entity>;
  */
 public function findByExample($entity, $example, $order = null, $dataPager = null, $translaters = null)
 {
     if (is_object($entity)) {
         $config = $entity->getConfig();
         $columns = $config['columns'];
         $criteria = new CriteriaImpl($entity);
         $criteria->setFileds($entity->getFileds());
         //瑕佹煡璇㈢殑瀛楁
         $criteria->setExample($example);
         //set order
         if (is_object($order)) {
             $criteria->addOrder($order);
         } else {
             if (is_array($order)) {
                 foreach ($order as $orderItem) {
                     $criteria->addOrder($orderItem);
                 }
             }
         }
         if (is_object($translaters)) {
             $criteria->addTranslater($translaters);
         } else {
             if (is_array($translaters)) {
                 foreach ($translaters as $translater) {
                     $criteria->addTranslater($translater);
                 }
             }
         }
         if ($dataPager) {
             $criteria->setDataPager($dataPager);
         }
         return $this->findAll($criteria);
     }
 }