yii2.0数据库交互ORM

来源:互联网 发布:什么是淘宝登录密码 编辑:程序博客网 时间:2024/06/06 07:53

ORM Object  Relational  Mapping  对象关系映射

ObjectPHP对象,属性

Relational数据库表,字段

Mapping对象和表的关系;属性与字段的关系 

自制ORM框架

在models文件夹下创建AOrm基类 AOrm.php

<?phpnamespace  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);    }}

0 0
原创粉丝点击