Esempio n. 1
0
 /**
  * 将数组解析成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);
 }