You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

197 lines
6.2 KiB

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
*
*-------------------------------------------------------------
* WB_Model
*-------------------------------------------------------------
* CI_Model 를 확장합니다.
*/
class WB_Model extends CI_Model
{
protected $_table = NULL;
protected $_pk = NULL;
protected $_status = NULL;
function __construct()
{
parent::__construct();
$this->load->database();
}
/**
* PK값으로 검색하여 한 행을 반환합니다.
*/
function get_one( $param=array())
{
$param['idx'] = element('idx', $param);
$param['column'] = element('column', $param, $this->_pk);
$param['select'] = element('select', $param, '*');
$param['from'] = element('from', $param, $this->_table);
$param['where'] = element('where', $param);
$param['limit'] = element('limit', $param, 1);
if(! $param['idx']) return FALSE;
$this->db->select($param['select']);
$this->db->from( $param['from'] );
$this->db->where( $param['column'], $param['idx'] );
// WHERE 조건이 들어있을경우
if( is_array($param['where']) && !empty($param['where']) && count($param['where']) > 0 )
{
foreach($param['where'] as $key => $val)
{
$this->db->where($key, $val);
}
}
// 기본적으로 한줄만 가져온다.
$this->db->limit( $param['limit'] );
$result = $this->db->get();
if( $result->num_rows() > 0 )
{
return $result->row_array();
}
else
{
return FALSE;
}
}
function get_list( $param = array() )
{
$param['select'] = ( isset($param['select']) && $param['select'] ) ? $param['select'] : "*";
$param['from'] = ( isset($param['from']) && $param['from'] ) ? $param['from'] : $this->_table;
$param['join'] = ( isset($param['join']) && $param['join'] && is_array($param['join']) ) ? $param['join'] : NULL;
$param['page'] = ( isset($param['page']) && $param['page'] ) ? $param['page'] : 1;
$param['page_rows'] = ( isset($param['page_rows']) && $param['page_rows'] ) ? $param['page_rows'] : 15;
$param['order_by'] = ( isset($param['order_by']) && $param['order_by'] ) ? $param['order_by'] : $this->_pk . " DESC";
$param['where'] = ( isset($param['where']) && $param['where'] && is_array($param['where']) ) ? $param['where'] : NULL;
$param['where_in'] = ( isset($param['where_in']) && $param['where_in'] && is_array($param['where_in']) ) ? $param['where_in'] : NULL;
$param['sc'] = ( isset($param['sc']) && $param['sc'] ) ? $param['sc'] : NULL;
$param['st'] = ( isset($param['st']) && $param['st'] ) ? $param['st'] : NULL;
$param['limit'] = ( isset($param['limit']) && $param['limit'] ) ? $param['limit'] : FALSE;
$param['start'] = ( $param['page'] -1 ) * $param['page_rows'];
$this->db->select("SQL_CALC_FOUND_ROWS " . $param['select'], false );
$this->db->from( $param['from'] );
// 사용자 정의 WHERE 문 처리
if( $param['where'] && is_array($param['where']) )
{
foreach($param['where'] as $key=>$val)
{
$this->db->where($key, $val);
}
}
// 사용자 정의 WHERE_IN 문 처리
if( $param['where_in'] && is_array($param['where_in']) )
{
foreach($param['where_in'] as $key=>$val)
{
$this->db->where_in($key, $val);
}
}
// 사용자 정의 WHERE 문 처리
if( $param['join'] && is_array($param['join']) )
{
foreach($param['join'] as $array)
{
$this->db->join($array[0], $array[1], $array[2]);
}
}
// 검색어 처리
if( $param['sc'] != NULL && $param['st'] !=NULL )
{
// 띄어쓰기로 분리해서 각각 like를 걸어준다.
$st = explode(" ", $param['st']);
foreach($st as $searchs)
{
$this->db->like($param['sc'], $searchs);
}
}
if($param['limit'] === TRUE)
{
$this->db->limit( $param['page_rows'], $param['start'] );
}
$this->db->order_by( $param['order_by'] );
$result = $this->db->get();
if(! $result ) {
echo "ERROR : ".$this->db->error()['message'].PHP_EOL."<br>";
echo "QUERY : ".$this->db->last_query();
}
if(IS_TEST) {
$return['query'] = $this->db->last_query();
}
$return['list'] = $result->result_array();
$result = $this->db->query("SELECT FOUND_ROWS() AS `cnt`");
$return['total_count'] = (int) $result->row(0)->cnt;
$return['total_page'] = ceil($return['total_count'] / $param['page_rows'] );
$num = 0;
foreach($return['list'] as &$row)
{
$row['nums'] = $return['total_count'] - $num - $param['start'];
$num++;
}
return $return;
}
function create( $param = NULL )
{
foreach( $param as $k => $v )
{
$this->db->set( $k, $v );
}
$this->db->from($this->_table);
$this->db->insert();
$pk = $this->db->insert_id();
return $this->get_one($pk);
}
function update( $param = NULL, $idx = NULL , $debug = FALSE)
{
foreach( $param as $k => $v )
{
$this->db->set( $k, $v );
}
$this->db->from($this->_table);
$this->db->where($this->_pk, $idx);
$this->db->update();
if( $debug ) {
return $this->db->last_query();
}
return $this->get_one($idx);
}
function update_batch($data)
{
return $this->db->update_batch($this->_table, $data, $this->_pk);
}
function insert_batch($data)
{
return $this->db->insert_batch($this->_table, $data);
}
function delete( $idx )
{
$this->db->where($this->_pk, $idx);
$this->db->set($this->_status, "N");
$this->db->update($this->_table);
}
}