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(); }