yii2.0数据库交互ORM

ORM 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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值