我花了一整天才发现,如何使我的代码更酷。我只是好奇,我可以将Codeigniter模型函数称为表吗?这是codeigniter与我的小自定义服务器端数据表。
我的模特:M_global
private function _get_datatables_query($table, $column_order, $column_search, $order) {
$this->db->from($table);
$i = 0;
foreach ($column_search as $item) {
if($_POST['search']['value']) {
if($i===0) {
$this->db->group_start();
$this->db->like($item, $_POST['search']['value']);
} else {
$this->db->or_like($item, $_POST['search']['value']);
}
if(count($column_search) - 1 == $i)
$this->db->group_end();
}
$i++;
}
if(isset($_POST['order'])) {
$this->db->order_by($column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
} else if(isset($order)) {
$order = $order;
$this->db->order_by(key($order), $order[key($order)]);
}
}
function get_datatables($table, $column_order, $column_search, $order)
{
$this->_get_datatables_query($table, $column_order, $column_search, $order);
if($_POST['length'] != -1)
$this->db->limit($_POST['length'], $_POST['start']);
$query = $this->db->get();
return $query->result();
}
function count_filtered($table, $column_order, $column_search, $order)
{
$this->_get_datatables_query($table, $column_order, $column_search, $order);
$query = $this->db->get();
return $query->num_rows();
}
public function count_all($table) {
$this->db->from($table);
return $this->db->count_all_results();
}
// My query here
function sum_filter() {
return $this->db->query("
SELECT
main.name,
main.date_submit,
main.id_claim,
ifnull((SELECT SUM(amount) FROM v_t_office
WHERE id_claim = main.id_claim), 0) as total_office,
ifnull((SELECT SUM(amount) FROM v_t_misc
WHERE id_claim = main.id_claim), 0) as total_misc,
ifnull((
(SELECT SUM(amount) FROM v_t_office
WHERE id_claim = main.id_claim) +
(SELECT SUM(amount) FROM v_t_misc
WHERE id_claim = main.id_claim)
), 0) as total_expense
FROM
vc_submit main
GROUP BY main.id_claim
")
}
我的控制人员:批准
这是我的问题,我无法使用,在$ table
public function show_approve() {
$table = $this->M_global->sum_filter(); //Here
// $table = 'v_transaction';
$column_order = array(null, 'name','date_submit','total_office','total_misc','total_expense',null);
$column_search = array('name','date_submit','total_office','total_misc','total_expense');
$order = array('name' => 'asc');
$list = $this->M_global->get_datatables($table, $column_order, $column_search, $order);
$data = array();
$no = $_POST['start'];
foreach ($list as $l) {
$no++;
$row = array();
$row[] = $no;
$row[] = $l->name;
$row[] = date('d-m-Y', strtotime($l->date_submit));
$row[] = $l->total_office;
$row[] = $l->total_misc;
$row[] = $l->total_expense;
$row[] = '';
$data[] = $row;
}
$output = array(
"draw" => $_POST['draw'],
"recordsFiltered" => $this->M_global->count_filtered($table, $column_order, $column_search, $order),
"recordsTotal" => $this->M_global->count_all($table),
"data" => $data,
);
echo json_encode($output);
}
我无法使用
$ table = $ this-> M_global-> sum_filter();
ajax响应说" strpos()期望参数1是字符串,对象给定"。我究竟做错了什么?或者它只是不能。换句话说,我使用的是由sum_filter()查询生成的v_transaction表。