코드이그나이트 스트라이트 모델
코드이그나이트에서 공용으로 사용할 수 있는 스트라이트 모델입니다.
개발을 하면서 많은 기능이 들어간 모델을 만들었는데 결국 간단하고 어디에서든지 사용가능한 모델이 편하더군요.
데이터베이스 테이블 기본 조건과 함께 사용설명이 있으니 쉽게 사용 가능합니다.
좀 더 복잡한 모델은 Case by Case 직접 수정하시면 됩니다. ^^
테이블 포멧
- idx
- INT, signed, NOT NULL, Primary Key, AUTO_INCREMENT, 기본키
- zidx
- INT, signed, NULL, 정렬 기본값은 idx*-1
- ids
- Varchar, AnySize, Primary Key, 사용자 정의 기본키 사용시
- created_ip
- INT, unsigned, NULL, 생성 IP
- created
- timestamp, NULL, 생성시간
- updated
- timestamp, NOT NULL, CURRENT_TIMESTAMP, ON UPDATE CURRENT_TIMESTAMP, 수정시간
- Other Fields
- Custom Definition, 사용자 정의
<?php if( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * straight Model * * @author uncaose@gmail.com * @link http://bluebreeze.co.kr/793 * @copyright uncaose@gmail.com * @since 2014.12.01 * @version 1.0 * @license MIT * @example * Database Table field Formmat * idx : Primary Key Numeric * zidx : INT, sortable Numeric * ids : Primary Key String * created_ip : Numeric IP Address * created : Timestamp * updated : Timestamp Auto Update * ** Customer Definition Other Fields ** * @example * $this->load->mode('straight_model', 'straight'); * $this->straight->setTable('tableName'); // set TableName, default 'user' * $this->straight->setRow(Array('id'=>'userid',...)); // create, returen primary key * $this->straight->setRow(Array('id'=>'userid',...), 1); // update, returen primary key * $this->straight->setRow(Array('id'=>'userid',...), Array('key'=>'val')); * $this->straight->unsetRow(1); // delete, return Boolean * $this->straight->unsetRow(Array('key'=>'val')); * $this->straight->getRow(1); // getRow, returen Array * $this->straight->getRow(Array('key'=>'val')); * $this->straight->getRows(30, 0); // getRows, limit=30, offset=0, return Array * $this->straight->getRows(30, 0, Array('key'=>'val')); * $this->straight->getRowsCnt(); // getRowsCnt, getRows like Where, return Numeric * $this->straight->getRowsCnt(Array('key'=>'val')); * $this->straight->getLists(30, 0, Array('key'=>>'val')); // getRows, getRowsCnt */ class Straight_model extends CI_Model { public $table = 'user'; public function __construct($table=''){ parent::__construct(); // default table user if( ! empty($table) ){ $this->setTable($table); } } /** * set TableName * * @param string $table * @throws Exception */ public function setTable($table=''){ if( empty($table) ){ Throw New Exception('Emtpy Table Name'); } $this->table = $table; } /** * asset where * @param Multitype:numeric|Array|Object $where * @throws Exception */ private function where($where=Array()){ switch( TRUE ){ // 배열, 객체 case( is_array($where) || is_object($where) ): $this->db->where($where); break; // 숫자, 문자 case( ! empty($where) ): $this->db->where('idx', $where); break; default: Throw New Exception('Unknown Primary Key'); break; } } /** * set Row * * @param Array $set * @param Multitype:numeric|Array|Object $where * @throws Exception * @return numeric */ public function setRow($set=Array(), $where=Array()){ if( empty($set) || sizeof($set) < 1 ){ Throw New Exception('Empty Set Value'); } // 생성 if( empty($where) ){ $this->db ->from( $this->table ) ->set($set) ->set('created', 'CURRENT_TIMESTAMP', FALSE ) ->set('created_ip', "INET_ATON('".$this->input->ip_address()."')", FALSE) ->insert(); if( $this->db->_error_number() ){ Throw New Exception( $this->db->_error_message(), $this->db->_error_number() ); } $idx = $this->db->insert_id(); // 업데이트 }else{ // PK 확인 if( is_numeric($where) ){ $idx = $where; $this->db->where('idx', $idx); }else{ $idx = $where['idx']; $this->where($where); } $this->db ->from( $this->table ) ->set($set) ->update(); if( $this->db->_error_number() ){ Throw New Exception( $this->db->_error_message(), $this->db->_error_number() ); } } return $idx; } /** * unset Row * * @param Multitype:numeric|Array|Object $where * @throws Exception * @return boolean */ public function unsetRow($where=Array()){ $this->where($where); $rs = $this->db ->from( $this->table ) ->delete(); if( $this->db->_error_number() ){ Throw New Exception( $this->db->_error_message(), $this->db->_error_number() ); } return $rs; } /** * get Row * @param Multitype:numeric|Array|Object $where * @throws Exception * @return Array */ public function getRow($where=Array()){ $this->where($where); $rs = $this->db ->from( $this->table ) ->get() ->row_array(); if( $this->db->_error_number() ){ Throw New Exception( $this->db->_error_message(), $this->db->_error_number() ); } return $rs; } /** * get Rows comnon Where * * @param Multitype:numeric|Array|Object $where * @return boolean */ private function getRowsWhere($where=Array()){ try{ $this->where($where); }catch(Exception $e){ // 예외처리시 검색조건 없음 처리 return FALSE; } } /** * get Rows * * @param number $limit * @param number $offset * @param Multitype:numeric|Array|Object $where * @return multitype:|multitype:Array */ public function getRows($limit=15, $offset=0, $where=Array()){ $rs = Array(); $this->getRowsWhere($where); $qs = $this->db ->from( $this->table ) ->order_by('zidx') ->offset( $offset ) ->limit( $limit ) ->get(); if( $this->db->_error_number() ){ Throw New Exception( $this->db->_error_message(), $this->db->_error_number() ); } if( $qs === NULL || ! $qs->num_rows ){ return $rs; } // return $qs foreach( $qs->result_array() AS $row ){ $rs[] = $row; } return $rs; } /** * get Rows Cnt * * @param Multitype:numeric|Array|Object $where * @return numeric */ public function getRowsCnt($where=Array()){ $rs = 0; $this->getRowsWhere($where); $rs = $this->db ->from( $this->table ) ->count_all_results(); if( $this->db->_error_number() ){ Throw New Exception( $this->db->_error_message(), $this->db->_error_number() ); } return $rs; } public function getLists($limit=15, $offset=0, $where=Array() ){ $rs = Array( 'total' => 0, 'lists' => Array(), ); $rs['total'] = $this->getRowsCnt( $where ); if( $rs['total'] < 1 ){ return $rs; } $rs['lists'] = $this->getRows( $limit, $offset, $where ); return $rs; } } /* End of file straight_model.php */ /* Locatin: models/straight_model.php */
반응형
'lang > php' 카테고리의 다른 글
CodeIgniter Email SMTP 451 Error (0) | 2015.01.30 |
---|---|
CodeIgniter Rest Server Format jsonp,cvs Error (0) | 2014.12.12 |
PHP 비기너 동영상 튜토리얼 (0) | 2014.10.29 |
CodeIgniter Lib (0) | 2014.09.15 |
mcrypt (0) | 2014.08.30 |