Files
2026-05-26 08:07:45 +00:00

191 lines
4.8 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class DynamicModel extends CI_Model {
protected $table;
protected $column_order = [];
protected $column_search = [];
protected $order = [];
public function setTable($table)
{
$this->table = $table;
return $this;
}
public function setColumn($order = [], $search = [], $default_order = [])
{
$this->column_order = $order;
$this->column_search = $search;
$this->order = $default_order;
return $this;
}
// =========================
// BASE QUERY (DATATABLE)
// =========================
private function _get_datatables_query()
{
$this->db->from($this->table);
// SEARCH
if (!empty($_POST['search']['value'])) {
$this->db->group_start();
foreach ($this->column_search as $i => $item) {
if ($i === 0) {
$this->db->like($item, $_POST['search']['value']);
} else {
$this->db->or_like($item, $_POST['search']['value']);
}
}
$this->db->group_end();
}
// ORDER
if (isset($_POST['order'])) {
$col = $_POST['order'][0]['column'];
$dir = $_POST['order'][0]['dir'];
if (isset($this->column_order[$col])) {
$this->db->order_by($this->column_order[$col], $dir);
}
} elseif (!empty($this->order)) {
foreach ($this->order as $key => $val) {
$this->db->order_by($key, $val);
}
}
}
// =========================
// DATATABLE GET
// =========================
public function get_datatables()
{
$this->_get_datatables_query();
if ($_POST['length'] != -1) {
$this->db->limit($_POST['length'], $_POST['start']);
}
return $this->db->get()->result();
}
public function count_filtered()
{
$this->_get_datatables_query();
return $this->db->count_all_results();
}
public function count_all()
{
return $this->db->count_all($this->table);
}
// =========================
// CRUD BASIC
// =========================
public function get_all($orderBy = null, $direction = 'ASC')
{
if ($orderBy) {
$this->db->order_by($orderBy, $direction);
}
return $this->db->get($this->table)->result();
}
public function get_by_id($id, $pk = 'id')
{
return $this->db->where($pk, $id)->get($this->table)->row();
}
public function get_where($where = [])
{
return $this->db->where($where)->get($this->table)->result();
}
public function insert($data)
{
$this->db->insert($this->table, $data);
return $this->db->insert_id();
}
public function insert_batch($data)
{
return $this->db->insert_batch($this->table, $data);
}
public function update($id, $data, $pk = 'id')
{
return $this->db->where($pk, $id)->update($this->table, $data);
}
public function update_where($where, $data)
{
return $this->db->where($where)->update($this->table, $data);
}
public function delete($id, $pk = 'id')
{
return $this->db->where($pk, $id)->delete($this->table);
}
public function delete_where($where)
{
return $this->db->where($where)->delete($this->table);
}
// =========================
// ADVANCED QUERY
// =========================
public function join($table, $on, $type = 'left')
{
$this->db->join($table, $on, $type);
return $this;
}
public function where($where)
{
$this->db->where($where);
return $this;
}
public function like($field, $match)
{
$this->db->like($field, $match);
return $this;
}
public function order_by($field, $direction = 'ASC')
{
$this->db->order_by($field, $direction);
return $this;
}
public function limit($limit, $offset = 0)
{
$this->db->limit($limit, $offset);
return $this;
}
public function get()
{
return $this->db->get($this->table)->result();
}
public function first()
{
return $this->db->get($this->table)->row();
}
public function query($sql, $binds = null)
{
return $this->db->query($sql, $binds)->result();
}
public function find($id, $pk = 'id')
{
return $this->db->where($pk, $id)->get($this->table)->row();
}
}