很早知道ci出了2.0版本了。这几天正好有项目要用ci开发 虽然项目不大。不过也从开发项目的过程中熟悉了CI框架

因为是个电商项目 本来想用个YII2 的。 封装的虽然厉害不过功能强大 因为另个兄弟坚持所以采用了CI 开搞前特地问了下新版有没ORM(我知道老版没有- -)

被告知有了ORM 结果开发起来发现没有。。 于是自己简单实现了个 不吐槽了 直接上代码吧。。。

<?php
class Orm_Model extends MY_Model{
protected $pk = 'id';
protected $_isNew = false;
protected $_ID = null;
protected $_tableName;
protected $_arRelationMap;
protected $_DB;
protected $_attrs = array(); public function __consturct(){
parent::__construct();
$this->_tableName = $this->getTableName();
$this->_arRelationMap = $this->getRelationMap();
} protected function getTableName(){}
protected function getRelationMap(){} public function getAttr(){
return $this->_attrs;
} public function find( $condition ){
$keys = implode( '`,`', array_keys( $this->getRelationMap() ));
$ret = $this->db_r->select($keys)->where( $condition )->limit(1)->get( $this->getTableName() );
$this->_attrs = $ret->row_array();
if( empty( $this->_attrs[$this->pk] ) )
$this->_isNew = true;
return $this;
} public function save(){
$pKey = (isset( $this->_attrs[$this->pk] ) && !empty( $this->_attrs[$this->pk] )) ? $this->_attrs[$this->pk] : '';
if( empty( $pKey ) || $this->_isNew ){
return $this->db_w->insert( $this->getTableName() , $this->_attrs );
}else{
$this->db_w->where( $this->pk , $pKey );
return $this->db_w->update( $this->getTableName(), $this->_attrs );
}
} public function __call($method,$param){
$type = substr($method,0,3);
$member = substr($method,4);
switch($type){
case 'get':
return $this->getMember($member);
break;
case 'set':
return $this->setMember($member,$param[0]);
}
return false;
} public function setMember($key , $val){
if( !$this->checkAttr($key) )
return false;
$this->_attrs[$key] = $val;
} public function getMember($key){
$ret = null;
if( $this->checkAttr($key) )
$ret = isset( $this->_attrs[$key] ) ? $this->_attrs[$key] : '';
return $ret;
} private function checkAttr( $key ){
$ret = true;
$rel = $this->getRelationMap();
if( !array_key_exists( $key, $rel ) )
$ret = false;
return $ret;
} public function del(){
$pKey = isset( $this->_attrs[$this->pk] ) ? $this->_attrs[$this->pk] : '';
if( !empty( $pKey ) ){
return $this->db_w->delete( $this->getTableName() , array($this->pk =>$pKey));
}
return false;
}
}
?>

使用:

model:

<?php
class User_model extends Orm_Model
{
protected $pk = 'id'; public function __construct()
{
parent::__construct();
} public function getRelationMap(){
return array(
'id' => 'ID',
'user_name'=> 'USER_ID',
'user_passwd' => 'CART_INFO',
'email' => 'TOTAL_PRICE',
'mobile' => 'UPDATE_TIME',
'point' => 'ADD_TIME',
'last_login_ip' => 'STATUS',
'add_time' => 'STATUS'
);
} public function getTableName(){
return 'user';
} }
<?php
/**
*
* Enter description here ...
* @author Administrator
*
*/
class User_service { function __construct(){
$this->Obj = &get_instance();
$this->Obj->load->model('user_model');
$this->user_model = $this->Obj->user_model;
} public function login( $params ){
$this->user_model->find(array('user_name'=> $params['user_name'] ) );
// xxxxxx
}
}

php ci 2.0框架 ORM的更多相关文章

  1. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  2. 架构从最简单的数据访问框架(ORM)到资源调度和治理中心(SOA)说起

    随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将 ...

  3. win8 系统无法正常安装.net framework 2.0和3.0框架如何解决

    在安装.net framework2.0框架的时候一直提示要用户从网上面下载框架,你点击下载好的安装包也是无法安装的.这个时候就需要你使用离线的安装包来进行问题的解答附件在此http://pan.ba ...

  4. yii2.0框架安装心得

    yii2.0安装心得 能够搜索到这篇文章的朋友相信是对yii框架有兴趣的,但是我不得不吐槽的是,这个安装过程确实让人头疼,接下来就让大家见证一下这个纠结的过程 根据官网的说法,安装这个框架需要用到co ...

  5. php--yii2.0框架的curl

    yii2.0框架的增删改查 //插入操作  save() $customer=new Customer(); $customer->name=‘小熊‘; $customer->save() ...

  6. node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传

    node.js下四种post提交数据的方式 今天说分享的是其中一种,就是上传文件. Express 4.0 以后,将功能原子化,高内聚,低耦合,独立出了很多中间件 今天主要分享文件上传 对于conne ...

  7. robotlegs2.0框架实例源码带注释

    robotlegs2.0框架实例源码带注释 Robotlegs2的Starling扩展 有个老外写了robotleges2的starling扩展,地址是 https://github.com/brea ...

  8. DWR3.0框架入门(2) —— DWR的服务器推送

    DWR3.0框架入门(2) —— DWR的服务器推送 DWR 在开始本节内容之前,先来了解一下什么是服务器推送技术和DWR的推送方式.   1.服务器推送技术和DWR的推送方式   传统模式的 Web ...

  9. 对thinkphp5.0框架的实例学习

    不论是渗透测试还是代码审计的过程中会碰到用不同的框架搭建起来的网站,熟悉这些框架的基本原理,会帮助我们快速的理解漏洞原理,提高干活效率,所以自己本地搭了个php环境,来入门实例学习下thinkphp5 ...

随机推荐

  1. salesforce 零基础开发入门学习(十三)salesforce中JSON的使用

    JSON作为一种目前流行的轻量级数据交换格式,salesforce也对其有良好的类对其进行封装处理.salesforce中前后台交互时,使用JSON可以将apex的Object对象进行序列化和反序列化 ...

  2. vue for 绑定事件

    vue for 绑定事件 <div id="pro_list" v-for="item in pro_list"> <div class=&q ...

  3. jQuery学习易忘细节

    1.类似于alert(""),但不会中断页面操作:console.log("last"); 2.javascript是HTML5以及所有现代浏览器中的默认脚本语 ...

  4. Android入门(十一)SQLite CURD

    原文链接:http://www.orlion.ga/594/ 一.添加数据 SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法 ...

  5. hibernate(五)核心开发接口与对象的三种状态

    本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...

  6. CSS学习目录

    前面的话 CSS是前端工程师的基本功,但好多执迷于学习javascript的人的基本功并不扎实.可能一些人从w3school网站匆匆过了一遍,只是对CSS常用概念有一些表面上的理解,就一头扎进java ...

  7. 动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)

    × 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍 ...

  8. sqlserver -- 解决sqlserver2008“Prevent saving changes that require table re_creation(阻止保存要求重新创建表的更改)”的问题

    电脑重装了sqlserver2008 R2(英文版)后,新建数据表,新建字段,发现有个字段类型设置错了,想修改字段类型,而该表已经保存好了,即保存后修改字段属性.但无法保存修改后的设置,提示“Savi ...

  9. Oracle RMAN 备份一例

    Oracle RMAN备份一例: Solaris 10 + Oracle 11.2.0.3 Shell:csh,安装有bash,脚本调用bash 备份策略:周日0级备份,周一~周六1级备份,每6小时备 ...

  10. 常用mysql数据库引擎——MyISAM和InnoDB区别

    背景: 昨天做项目时,发现使用事务后回滚不了,后来把数据库引擎从MyISAM换成InnoDB后果断好了,如下图: 正文: MyISAM和InnoDB是mysql常用的数据库引擎,他们的区别如下: 数据 ...