php ci 2.0框架 ORM
很早知道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的更多相关文章
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- 架构从最简单的数据访问框架(ORM)到资源调度和治理中心(SOA)说起
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将 ...
- win8 系统无法正常安装.net framework 2.0和3.0框架如何解决
在安装.net framework2.0框架的时候一直提示要用户从网上面下载框架,你点击下载好的安装包也是无法安装的.这个时候就需要你使用离线的安装包来进行问题的解答附件在此http://pan.ba ...
- yii2.0框架安装心得
yii2.0安装心得 能够搜索到这篇文章的朋友相信是对yii框架有兴趣的,但是我不得不吐槽的是,这个安装过程确实让人头疼,接下来就让大家见证一下这个纠结的过程 根据官网的说法,安装这个框架需要用到co ...
- php--yii2.0框架的curl
yii2.0框架的增删改查 //插入操作 save() $customer=new Customer(); $customer->name=‘小熊‘; $customer->save() ...
- node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传
node.js下四种post提交数据的方式 今天说分享的是其中一种,就是上传文件. Express 4.0 以后,将功能原子化,高内聚,低耦合,独立出了很多中间件 今天主要分享文件上传 对于conne ...
- robotlegs2.0框架实例源码带注释
robotlegs2.0框架实例源码带注释 Robotlegs2的Starling扩展 有个老外写了robotleges2的starling扩展,地址是 https://github.com/brea ...
- DWR3.0框架入门(2) —— DWR的服务器推送
DWR3.0框架入门(2) —— DWR的服务器推送 DWR 在开始本节内容之前,先来了解一下什么是服务器推送技术和DWR的推送方式. 1.服务器推送技术和DWR的推送方式 传统模式的 Web ...
- 对thinkphp5.0框架的实例学习
不论是渗透测试还是代码审计的过程中会碰到用不同的框架搭建起来的网站,熟悉这些框架的基本原理,会帮助我们快速的理解漏洞原理,提高干活效率,所以自己本地搭了个php环境,来入门实例学习下thinkphp5 ...
随机推荐
- iOS ---Swift学习与复习
swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...
- 使用反射将DataTable的数据转成实体类
利用反射避免了硬编码出现的错误,但是实体类的属性名必须和数据库名字对应(相同) 1.利用反射把DataTable的数据写到单个实体类 /// <summary> ///利用反射把DataT ...
- JavaScript到底是不是单线程
JavaScript到底是不是单线程 JavaScript引擎 在了解计时器内部运作前,我们必须清楚一点,触发和执行并不是同一概念,计时器的回调函数一定会在指定delay的时间后被触发,但并不一定立即 ...
- 3D touch在Unity3D中的使用
0.开篇: 3D touch随着iOS9发布,它并不是一个单独的技术,而是可以分为pressure sensitivity.quick action以及peek&pop.在官方的介绍中提到可以 ...
- PhoneGap介绍及简单部署
一.什么是PhoneGap: PhoneGap是一个自由开放源码的开发工具和框架,允许利用HTML + JavaScript + CSS的强大功能在多个手机平台上开发程序,开发出来的程序经过在各自的平 ...
- Testing - 测试基础 - 概念
测试是为了度量和提高被测试软件的质量,对测试软件进行工程设计.实施.维护的的整个生命周期过程. 仅仅发现Bug是测试的初步,而分析出根本原因推动问题的解决,却要有很深的功底. 不同的测试岗位从事不同的 ...
- Network - DNS
珠玉在前,不再赘言 DNS 原理入门 从理论到实践,全方位认识DNS(理论篇) 从理论到实践,全方位认识DNS(实践篇)
- 你真的了解setTimeout和setInterval吗?
博客园的代码排版真难用,编辑时候是好的,一保存就是乱了——本文也同时发表在我另一独立博客上 你真的了解setTimeout和setInterval吗?,可以移步至这里吧 setTimeout和setI ...
- 让微信扫描直接下载你的APK
去年在做一个项目的时候,用微信扫描apk下载失效,显示空白页,网上找找发现在后面加一个字符串即可,于是简单搞定.过了一阵子,今年不行了,我的敏捷个人下载二维码也失效了,今天和大家说一下,现在如何解决这 ...
- 《ASP.NET SignalR系列》第二课 SignalR的使用说明
从现在开始相关文章请到: http://lko2o.com/moon 接续上一篇:<ASP.NET SignalR系列>第一课 认识SignalR (还没有看的话,建议您先看看) 一.指定 ...