/** * @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); }