yii2.0数据库交互ORM
2016-07-10 20:29
423 查看
ORM
Object Relational Mapping 对象关系映射
ObjectPHP
对象,属性
Relational
数据库表,字段
Mapping
对象和表的关系;属性与字段的关系
自制ORM框架
在models文件夹下创建AOrm基类 AOrm.php
创建子类文件models/BUser.php
在控制器中调用models/AOrm下的方法
Object Relational Mapping 对象关系映射
ObjectPHP
对象,属性
Relational
数据库表,字段
Mapping
对象和表的关系;属性与字段的关系
自制ORM框架
在models文件夹下创建AOrm基类 AOrm.php
<?php namespace app\models; abstract class AOrm{ public $tablename; public $primaryKey='id'; public $id; public abstract function Mapping(); /* * 将对象持久化到数据库 * 如果id属性没有被赋值,那么执行插入操作,否则执行更新操作 */ public function save(){ $sql=$this->buildSaveSql(); \yii::$app->db->createCommand($sql)->execute(); } private function buildSaveSql(){ $sql=''; $mapping=$this->Mapping(); $fields=[]; $values=[]; if(empty($this->id)){ /* * 没有id执行插入操作 * INSERT INTO table_name() values() */ foreach($mapping as $k=>$v){ if(isset($this->$k)){ /* * mapping中的$k有uName, pwd, nName, restMoney, * mapping中的$v有username, password, nickname, rest * 所以$this->$k指向的是 * public $uName * public $pwd * public $nName * public $restMoney * isset($this->$k)表示这些变量是否有值; * $this->$k需要在控制器中赋值,如: AomController下 * $object=new BUser() * $object->nName='AORM'; */ array_push($fields,$v); array_push($values,"'{$this->$k}'"); } } return $sql='INSERT INTO '.$this->tablename.'('.implode(',',$fields).') VALUES('.implode(',',$values).')'; }else{ $set=[]; //更新操作 UPDATE table_name SET field=value , field=value where id= foreach($mapping as $k=>$v){ if(isset($this->$k)){ array_push($set, "{$v}='{$this->$k}'"); } } return $sql='UPDATE '.$this->tablename.' SET '.implode(',',$set).' WHERE '.$this->primaryKey.'='.$this->id; } } public function del(){ if(!empty($this->id)){ \yii::$app->db->createCommand('DELETE FROM '.$this->tablename.' where '.$this->primaryKey.'='.$this->id)->execute(); }else{ return false; } } }
创建子类文件models/BUser.php
<?php namespace app\models; class BUser extends AOrm{ public $tablename='test'; public $id; public $uName; public $pwd; public $nName; public $restMoney; public function Mapping() { // TODO: Implement Mapping() method. return [ 'uName' =>'username', 'pwd' =>'password', 'nName' =>'nickname', 'restMoney' =>'rest' ]; } }
在控制器中调用models/AOrm下的方法
<?php namespace app\controllers; use app\models\BUser; use yii\web\Controller; class AomController extends Controller{ public function actionTest(){ $object= new BUser() ; $object->uName='ORM'; $object->pwd='123456'; $object->nName='哈哈'; $object->id=4; $res=$object->del(); echo "<pre>"; print_r($res); } }
相关文章推荐
- PHP 写入txt文件换行
- PHP面向对象总结
- FTP-------应用层协议
- php中$this->是什么意思
- iOSAFN上传图片 php接收(一)(模拟表单上传)
- PHP如何获取二个日期的相差天数?
- PHP中静态(static)调用非静态方法详解
- PHP引用(&)使用详解
- elipse和editplus的快捷键
- PHP引用(&)初探:函数的引用返回
- PHP的大括号(花括号{})使用详解
- PHP与MYSQL学习笔记--基础篇1
- PHP正则表达式详解(二)
- PHP array_diff 的应用
- 离线地图数据tpk的制作
- PHP session的销毁是三种方式
- 本地环境 XAMPP+phpStorm+XDebug+chrome 配置和断点调试
- PHP正则表达式详解(一)
- PHP保留2位小数 格式化小数、浮点数
- PHP5 Session 使用详解(一)