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-数据持久化-第三方框架FMDB的使用
FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了 ...
- 学习ASP.NET MVC(八)——“Code First Migrations ”工具
在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情 ...
- Unity5.x在WP8.1中无法使用Reflection API的解决方法
下班前随便写点,虽然花了不少时间但是最终得到的解决方法还是比较简单的. 第一种方法:使用WinRTLegacy.dll中的类.这个dll在生成的WP project中是自带的无需在unity工程中添加 ...
- OpenCascade Modeling Algorithms Fillets and Chamfers
Modeling Algorithms Fillets and Chamfers 造型算法——倒圆与倒角 eryar@163.com 一.倒圆Fillet Constructor 1. BRepFil ...
- vs xamarin android 监听返回键退出程序
public override bool OnKeyDown([GeneratedEnum]Keycode keyCode, KeyEvent e) { if (keyCode == Keycode. ...
- Oracle之DBMS_RANDOM包详解
DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符.它具有以下函数. 其中,initialize,random,terminate函数在Oracle11g中已不推荐使 ...
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
- 牛顿法与拟牛顿法学习笔记(五)L-BFGS 算法
机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题.在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BF ...
- Testing - 测试基础 - 模型
珠玉在前,不再赘言. 软件测试模型 软件测试模型汇总
- MAC与HMAC的介绍及其在AWS和Azure中的应用
MAC 在密码学中,(消息认证码)Message Authentication Code是用来认证消息的比较短的信息.换言之,MAC用来保证消息的数据完整性和消息的数据源认证. MAC由消息本身和一个 ...