/** * 将数组解析成SQL * * @param array $filter * @return string */ protected function parseFilter(array $filter) { $where = array(); foreach ($filter as $field => $val) { if (($pos = strrpos($field, '__')) > 0) { $op = substr($field, $pos + 2); $field = substr($field, 0, $pos); switch ($op) { case 'gt': //大于 $where[] = "`{$field}` > " . $this->db->quote($val); break; case 'gte': //大于等于 $where[] = "`{$field}` >= " . $this->db->quote($val); break; case 'lt': //小于 $where[] = "`{$field}` < " . $this->db->quote($val); break; case 'lte': //小于等于 $where[] = "`{$field}` <= " . $this->db->quote($val); break; case 'like': //LIKE ‘%%’ $where[] = "`{$field}` LIKE " . $this->db->quote("%{$val}%"); break; case 'startswith': //LIKE 'xxx%' $where[] = "`{$field}` LIKE " . $this->db->quote("{$val}%"); break; case 'endswith': //LIKE '%xxx' $where[] = "`{$field}` LIKE " . $this->db->quote("%{$val}"); break; case 'between': //between 'a' AND 'b' $where[] = "`{$field}` BETWEEN " . $this->db->quote($val[0]) . " AND " . $this->db->quote($val[1]); break; } } elseif (is_array($val)) { foreach ($val as $k => $v) { $val[$k] = $this->db->quote($v); } $where[] = "`{$field}` IN (" . implode(',', $val) . ")"; } else { $where[] = "`{$field}` = " . $this->db->quote($val); } } return implode(' AND ', $where); }