lang/php

CodeIgniter Straight Model

C/H 2014. 12. 9. 13:32

CodeIgniter



코드이그나이트 스트라이트 모델

코드이그나이트에서 공용으로 사용할 수 있는 스트라이트 모델입니다.
개발을 하면서 많은 기능이 들어간 모델을 만들었는데 결국 간단하고 어디에서든지 사용가능한 모델이 편하더군요.
데이터베이스 테이블 기본 조건과 함께 사용설명이 있으니 쉽게 사용 가능합니다.
좀 더 복잡한 모델은 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