public function ajaxlist() { $field_names = ['sort_order', 'name', 'price', 'fee']; # init query object $query = Solution::query(); # setup ordering if (isset($_POST['order'])) { # TO-DO: add this code as library # this is works only for single ordering $field_key = $_POST['order'][0]['column']; $field_ord = $_POST['order'][0]['dir']; $field_name = $field_names[$field_key]; $query->orderBy($field_name, $field_ord); } # get total $total = $query->count(); # add offset $query->offset($_POST['start']); # add limit $query->take($_POST['length']); # get data $rows = $query->get(); $data = ['recordsTotal' => $total, 'recordsFiltered' => $total, 'data' => []]; if (!$rows->isEmpty()) { foreach ($rows as $row) { # TO-DO add this to library # create flexibility on assigning data $fields = []; for ($i = 0, $c = count($field_names); $i < $c; $i++) { $fields[] = $row->{$field_names}[$i]; } # Add action button here, on last column $fields[] = $this->list_action_button($row); $data['data'][] = $fields; } } return json_encode($data); }