很早知道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. iOS-性能优化2

    性能优化总结2 iOS应用是非常注重用户体验的,不光是要求界面设计合理美观,也要求各种UI的反应灵敏,我相信大家对那种一拖就卡卡卡的 TableView 应用没什么好印象.还记得12306么,那个速度 ...

  2. Java删除数据库中的数据

    1:删除数据库中数据表中的数据同样也是一个非常用的技术,使用executeUpdate()方法执行用来做删除SQL的语句可以删除数据库表中的数据 2:本案例使用Statement接口中的execute ...

  3. jQuery_03之事件、动画、类数组操作

    一.事件: 1.模式触发事件:  ①DOM:elem.onXXX();只能触发直接用onXXX绑定的事件处理函数:用addEventistener添加的事件监听无法模拟出发触发:  ②jQuery:$ ...

  4. jQuery中$.extend

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个 ...

  5. Codrops 优秀教程:实现效果精美的多层推拉菜单

    Codrops 给我们分享了一个多层菜单的实现教程.他们试图探索创建一个嵌套的多级菜单,是非常有用的东西,可以有很多的内容,如网上商店的导航菜单. 这个 Push Menu 效果理论上可以包含无限嵌套 ...

  6. [New Portal]Windows Azure Virtual Machine (14) 在本地制作数据文件VHD并上传至Azure(1)

    <Windows Azure Platform 系列文章目录> 之前的内容里,我介绍了如何将本地的Server 2012中文版 VHD上传至Windows Azure,并创建基于该Serv ...

  7. Elasticsearch增删改查 之 —— Get查询

    GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在:或者执行CURD中的文档查询.与检索不同的是,GET查询是实时查询,可以实时查询到索引结果.而检索则是需要经过处理,一 ...

  8. [译]学习IPython进行交互式计算和数据可视化(四)

    第三章 使用Python进行数字计算 尽管IPython强大的shell和扩展后的控制台能被任何Python程序员使用,但是这个工具最初是科学奖为科学家设计的.它的主要设计目标就是为使用Python进 ...

  9. WinForm,MVC知识点

    WinForm的一些基础知识,用来回忆自己遗忘的,唤醒自己的知识. 虽然现在有MVC但是我觉得还是要学习一下WinForm的,毕竟以前也被大家用了好多年. 基础知识01 1:一个控件有很多的事件,每个 ...

  10. 读卡器的Win32 Dll调用

    unsafe class Program { [DllImport("mwhrf_bj.dll")] public static extern int rf_card(int ic ...