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

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

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

  1. <?php
  2. class Orm_Model extends MY_Model{
  3. protected $pk = 'id';
  4. protected $_isNew = false;
  5. protected $_ID = null;
  6. protected $_tableName;
  7. protected $_arRelationMap;
  8. protected $_DB;
  9. protected $_attrs = array();
  10.  
  11. public function __consturct(){
  12. parent::__construct();
  13. $this->_tableName = $this->getTableName();
  14. $this->_arRelationMap = $this->getRelationMap();
  15. }
  16.  
  17. protected function getTableName(){}
  18. protected function getRelationMap(){}
  19.  
  20. public function getAttr(){
  21. return $this->_attrs;
  22. }
  23.  
  24. public function find( $condition ){
  25. $keys = implode( '`,`', array_keys( $this->getRelationMap() ));
  26. $ret = $this->db_r->select($keys)->where( $condition )->limit(1)->get( $this->getTableName() );
  27. $this->_attrs = $ret->row_array();
  28. if( empty( $this->_attrs[$this->pk] ) )
  29. $this->_isNew = true;
  30. return $this;
  31. }
  32.  
  33. public function save(){
  34. $pKey = (isset( $this->_attrs[$this->pk] ) && !empty( $this->_attrs[$this->pk] )) ? $this->_attrs[$this->pk] : '';
  35. if( empty( $pKey ) || $this->_isNew ){
  36. return $this->db_w->insert( $this->getTableName() , $this->_attrs );
  37. }else{
  38. $this->db_w->where( $this->pk , $pKey );
  39. return $this->db_w->update( $this->getTableName(), $this->_attrs );
  40. }
  41. }
  42.  
  43. public function __call($method,$param){
  44. $type = substr($method,0,3);
  45. $member = substr($method,4);
  46. switch($type){
  47. case 'get':
  48. return $this->getMember($member);
  49. break;
  50. case 'set':
  51. return $this->setMember($member,$param[0]);
  52. }
  53. return false;
  54. }
  55.  
  56. public function setMember($key , $val){
  57. if( !$this->checkAttr($key) )
  58. return false;
  59. $this->_attrs[$key] = $val;
  60. }
  61.  
  62. public function getMember($key){
  63. $ret = null;
  64. if( $this->checkAttr($key) )
  65. $ret = isset( $this->_attrs[$key] ) ? $this->_attrs[$key] : '';
  66. return $ret;
  67. }
  68.  
  69. private function checkAttr( $key ){
  70. $ret = true;
  71. $rel = $this->getRelationMap();
  72. if( !array_key_exists( $key, $rel ) )
  73. $ret = false;
  74. return $ret;
  75. }
  76.  
  77. public function del(){
  78. $pKey = isset( $this->_attrs[$this->pk] ) ? $this->_attrs[$this->pk] : '';
  79. if( !empty( $pKey ) ){
  80. return $this->db_w->delete( $this->getTableName() , array($this->pk =>$pKey));
  81. }
  82. return false;
  83. }
  84. }
  85. ?>

使用:

model:

  1. <?php
  2. class User_model extends Orm_Model
  3. {
  4. protected $pk = 'id';
  5.  
  6. public function __construct()
  7. {
  8. parent::__construct();
  9. }
  10.  
  11. public function getRelationMap(){
  12. return array(
  13. 'id' => 'ID',
  14. 'user_name'=> 'USER_ID',
  15. 'user_passwd' => 'CART_INFO',
  16. 'email' => 'TOTAL_PRICE',
  17. 'mobile' => 'UPDATE_TIME',
  18. 'point' => 'ADD_TIME',
  19. 'last_login_ip' => 'STATUS',
  20. 'add_time' => 'STATUS'
  21. );
  22. }
  23.  
  24. public function getTableName(){
  25. return 'user';
  26. }
  27.  
  28. }
  1. <?php
  2. /**
  3. *
  4. * Enter description here ...
  5. * @author Administrator
  6. *
  7. */
  8. class User_service {
  9.  
  10. function __construct(){
  11. $this->Obj = &get_instance();
  12. $this->Obj->load->model('user_model');
  13. $this->user_model = $this->Obj->user_model;
  14. }
  15.  
  16. public function login( $params ){
  17. $this->user_model->find(array('user_name'=> $params['user_name'] ) );
  18. // xxxxxx
  19. }
  20. }

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-旧项目中手动内存管理(MRC)转ARC

    在ARC之前,iOS内存管理无论对资深级还是菜鸟级开发者来说都是一件很头疼的事.我参 加过几个使用手动内存管理的项目,印象最深刻的是一个地图类应用,由于应用本身就非常耗内存,当时为了解决内存泄露问题, ...

  2. 为什么项目的jar包会和tomcat的jar包冲突?

    为什么项目的jar包会和tomcat的jar包冲突? 碰到这个问题,猜测tomcat启动时会将自己的lib和项目的lib在逻辑上归并为一个大的lib,但是并没有做版本区分以及去重,这样相同的包可能就有 ...

  3. HashSet源码详解

    序言 在写了HashMap文章后,隔了几天才继续这一系列的文章,因为要学的东西实在是太多了,写一篇要花费的时间很多,所以导致隔了几天才来写.不过希望自己坚持下去.终有一天会拨开云雾见青天的.学Hash ...

  4. C#多线程之旅(3)——线程池

    v博客前言 先交代下背景,写<C#多线程之旅>这个系列文章主要是因为以下几个原因:1.多线程在C/S和B/S架构中用得是非常多的;2.而且多线程的使用是非常复杂的,如果没有用好,容易造成很 ...

  5. Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .SparkSQL的发展历程 1.1 Hive and Shark SparkSQL的前身是 ...

  6. WebStorm 9 自动编译 LESS 产出 CSS 和 source maps

    1.双击桌面Chrome图标,打开Chrome,按键盘“F12”键,打开开发工具界面,点击其右上角的“设置”按钮,勾选“Enable JavaScript source maps”  及“Enable ...

  7. Sparse Filtering 学习笔记(一)网络结构与特征矩阵

      Sparse Filtering 是一个用于提取特征的无监督学习算法,与通常特征学习算法试图建模训练数据的分布的做法不同,Sparse Filtering 直接对训练数据的特征分布进行分析,在所谓 ...

  8. 轻松自动化---selenium-webdriver(python) (十)

    本节重点 处理下拉框 switch_to_alert() accept() 下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再 ...

  9. 写在MongoCola在Github上获得200个Star之后

    MongoCola MongoCola是一个开源的MongoDB管理工具. 由于最初版本的设计失误,所以现在只能在Windows上使用,虽然可以在OSX上使用,但是非常别扭. 契机 MongoCola ...

  10. AngularJS中使用service,并同步数据

    service是单例对象,在应用中不同代码块之间共享数据. 对一些公用的方法封装到service中,然后通过依赖注入在Controller中调用,示例代码: 1.创建一个模块: var module ...