Example #1
0
 /**
  * @param $search
  * @param bool|false $order
  * @return mixed
  */
 public static function search($search, $order = false)
 {
     $clz = get_called_class();
     $query = new AbBaseQuery($clz);
     $count = $query->count();
     $binds = array();
     $page = 1;
     $pageSize = ApplicationConfig::getDefaultPageSize();
     $pageCount = $count / $pageSize + ($count % $pageSize != 0);
     $pageCount = $pageCount ?: 1;
     foreach ($search as $key => $value) {
         if ($key == '_url') {
             continue;
         } else {
             if ($key == '__pager_current') {
                 $page = $value ? intval($value) : 1;
                 continue;
             } else {
                 if ($key == '__pager_size') {
                     $pageSize = $value ? intval($value) : $pageSize;
                     continue;
                 }
             }
         }
         $params = array();
         if (is_array($value)) {
             if (array_key_exists('from', $value)) {
                 $params['range'] = '>=';
                 $from = $value['from'];
                 if (!empty($from)) {
                     $binds = array_merge($binds, self::addCondition($query, $key, $from, $params));
                 }
             }
             if (array_key_exists('to', $value) && !empty($value['to'])) {
                 $params['range'] = '<=';
                 $to = $value['to'];
                 if (!empty($to)) {
                     $binds = array_merge($binds, self::addCondition($query, $key, $from, $params));
                 }
             }
         } else {
             if ($clz::isLikeField($key)) {
                 $params['like'] = true;
             }
             if (!empty($value) || $value === '0') {
                 $binds = array_merge($binds, self::addCondition($query, $key, $value, $params));
             }
         }
     }
     if (method_exists($clz, 'beforeSearch')) {
         $clz::onSearch($query);
     }
     $params = array('binds' => $binds);
     if ($order) {
         $params['order'] = $order;
     }
     if (!empty($joins) && is_array($joins)) {
         foreach ($joins as $modelName => $fieldPair) {
             $query->addJoin($modelName, $fieldPair);
         }
     }
     $params['limit'] = array($pageSize, ($page - 1) * $pageSize);
     // Get results
     $items = $query->execute($params);
     return array('count' => $count, 'page_count' => $pageCount, 'items' => $items);
 }