image.png
对于上面的这种设计的机制则被称为ORM机制。
对于ORM机制需要注意的是,该机制只是一种思想?那么既然是一种思想,则可以使用多种方式进行实现
常见的实现方式

  1. 有这些AR(active Record)机制实现了ORM思想
  2. 在laravel 里面也使用Eloquent ORM是实现ORM思想

image.png
相关:http://www.cnblogs.com/52fhy/p/5353181.html

AR机制操作数据

思想:

  1. 创建一个类文件
  2. 类文件的属性是表中的字段
  3. 类的实现代表是表中记录

    添加机制

  4. 创建一个模型类文件,并且定义相关属性

image.png

  1. 在控制器的方法里面实例化模型,为对象的字段属性进行赋值,然后调用add方法进行入库数据

    1. public function test(){
    2. $goodsModel=D('Goods');
    3. //使用ar机制擦汗如数据
    4. $goodsModel->goods_name = 'new Goods';
    5. $goodsModel->goods_sn = uniqid();
    6. $goodsModel->goods_price = 12.33;
    7. $goodsModel->goods_number = 122;
    8. $rs = $goodsModel->add();
    9. dump($rs);
    10. }
    11. }

    注意:由于我们使用的自定义的模型类,则我们在实例化的时候需要使用D进行实例化,因为M实例化的是系统Modele.class.php
    思考:我们之前是给add传递一个数组进行输入的插入
    image.png
    那么这两种方式到底有啥区别或者是联系?
    image.png
    322通过AR的机制和数组方式其底层都是一样的。只是AR方式使用的时候,会触发一个 set的魔术方法进行对象的属性赋值操作。赋值给模型对象的一个$data属性,并且这个属性在TP里面叫做数据对象(主要是保存要插入到数据库的信息)

    模型字段的分析

    image.png

  2. 如果项目上线,则就不是调试模式,则看配置文件中DB_FIELDS_CACHE项如果为true则直接读取缓存,存在I0开销

  3. 如果没有上线,则为调试模式,则需要查看debug.php配置文件里面的里面的

DB_FIELDS_CACHE 项,如果为true则直接读取,如果为false则去数据库获取步骤:Model.class.php——> construct() ==>$this->db()——> $this->_checkTablelnfo—->
$this->db->getFieldsO—-> mysql.class.php,存在链接数据库,数据库开销

  1. 注意:如果我们的模型里面定义$fields属性,则以我们定义的为准优先级最高但是注意一般上线之后开启,本地调试不建议开启,建议每次查询数据库,因为本地开发的时候字段可能会不断的变化。

    模型的查询

    image.png
    image.png
    效果:
    image.png

    链式调用 -field

    1. public function test4()
    2. {
    3. //只需要获取商品的名称
    4. $goodsModel = D('Goods');
    5. //链式调用 获取指定字段的值
    6. $goodsData= $goodsModel->field('goods_name,goods_id')->select();
    7. dump($goodsData);
    8. }

    image.png

    where

    image.png

    order

    image.png
    效果
    image.png

    获取最后一次执行的SQL语句

    image.png
    用页面展示这次web 相关的所有的请求信息
    image.png

    链式调用-链表操作

    原生sql执行

    image.png
    注意:这里我们使用空模型的query方法完成了查询操作。如果我们要做查询则使用query
    如果要执行insertlupdateldelete则需要使用execute方法

    转换成链式操作

    image.png

    模型更新

    按主键

    image.png

    按其他字段

    1. public function test11(){
    2. $goodsModel= D('Goods');
    3. $updateData =array(
    4. // 待更新的条件
    5. //待更新的数据
    6. 'goods_name'=> 'my new data',
    7. 'goods_price'=> 12.23,
    8. );
    9. //待更新的条件
    10. $option= array(
    11. 'where'=> array('goods_name'=>'my new data'),
    12. );
    13. $rs = $goodsModel->save($updateData);
    14. dump($rs);
    15. }