public function search_by_keyword(Database_Query $query) { $keyword = Request::initial()->query('search'); if (is_array($keyword)) { $fields = array(); foreach ($keyword as $field => $value) { if (in_array($field, $this->fields())) { continue; } $fields[$field] = $value; } if (!empty($fields)) { $query->where_open(); foreach ($fields as $field => $value) { $field = Arr::get($this->fields(), $field); $query->and_where(Arr::get($field, 'db_name'), 'like', '%' . $value . '%'); } return $query->where_close(); } return $query; } else { if (empty($keyword)) { return $query; } } $query->where_open()->or_where('d.id', 'like', '%' . $keyword . '%')->or_where('d.header', 'like', '%' . $keyword . '%'); foreach ($this->fields() as $field) { if (Arr::get($field, 'searchable') === FALSE or Arr::get($field, 'db_name') === NULL) { continue; } $query->or_where(Arr::get($field, 'db_name'), 'like', '%' . $keyword . '%'); } return $query->where_close(); }
/** * * @param Database_Query $db * @param array $clause * @return type */ public static function _conditions($db, array $clause) { foreach ($clause as $type => $params) { switch ($type) { case 'select': foreach ($params as $param) { $db->select($param); } break; case 'where': foreach ($params as $param) { $db->where($param[0], $param[1], $param[2]); } break; case 'or_where': foreach ($params as $param) { $db->or_where($param[0], $param[1], $param[2]); } break; case 'order_by': foreach ($params as $param) { $db->order_by($param[0], $param[1]); } break; case 'limit': $db->limit((int) $params); break; case 'offset': $db->offset((int) $params); break; } } return $db; }