Пример #1
0
 /**
  *
  * @param Database_Query_Builder_Select $query
  */
 public function apply_filters(&$query)
 {
     $fk1_alias = '';
     foreach ($this->_filters as $filter) {
         // FOREIGN KEYS
         $column = $this->_columns[$filter['column']];
         if ($column->is_foreign_key()) {
             $fk1_table = $column->get_referenced_table();
             $fk1_title_column = $fk1_table->get_title_column();
             $fk1_alias .= 'f';
             $query->join(array($fk1_table->get_name(), $fk1_alias), 'LEFT OUTER')->on($this->_name . '.' . $column->get_name(), '=', $fk1_alias . '.id');
             $filter['column'] = $fk1_alias . '.' . $fk1_title_column->get_name();
             // FK is also an FK?
             if ($fk1_title_column->is_foreign_key()) {
                 $fk2_table = $fk1_title_column->get_referenced_table();
                 $fk2_title_column = $fk2_table->get_title_column();
                 $fk2_alias = $fk1_alias . 'f';
                 $query->join(array($fk2_table->get_name(), $fk2_alias), 'LEFT OUTER')->on($fk1_alias . '.' . $fk1_title_column->get_name(), '=', $fk2_alias . '.id');
                 $filter['column'] = $fk2_alias . '.' . $fk2_title_column->get_name();
             }
         }
         // LIKE or NOT LIKE
         if ($filter['operator'] == 'like' || $filter['operator'] == 'not like') {
             $filter['value'] = '%' . $filter['value'] . '%';
             $filter['column'] = DB::expr('CONVERT(' . $filter['column'] . ', CHAR)');
         }
         // IS EMPTY
         if ($filter['operator'] == 'empty') {
             $query->where($filter['column'], 'IS', NULL);
             $query->or_where($filter['column'], '=', '');
             $filter['column'] = '';
         }
         // IS NOT EMPTY
         if ($filter['operator'] == 'not empty') {
             $query->where($filter['column'], 'IS NOT', NULL);
             $query->and_where($filter['column'], '!=', '');
             $filter['column'] = '';
         }
         if (!empty($filter['column'])) {
             $query->where($filter['column'], $filter['operator'], $filter['value']);
         }
     }
     // end foreach filter
     // Get WHERE permissions
     foreach ($this->get_permissions() as $perm) {
         if (!empty($perm['where_clause'])) {
             $query->and_where(DB::expr($perm['where_clause'] . ' AND 1'), '=', 1);
         }
     }
 }
Пример #2
0
 /**
  * Creates a new "OR WHERE" condition for the query.
  *
  * @param   mixed   $column   column name or array($column, $alias) or object
  * @param   string  $op       logic operator
  * @param   mixed   $value    column value
  * @return Jelly_Builder
  */
 public function or_where($column, $op, $value)
 {
     return parent::or_where($this->_field_alias($column, $value), $op, $value);
 }