对于上面的这种设计的机制则被称为ORM机制。
对于ORM机制需要注意的是,该机制只是一种思想?那么既然是一种思想,则可以使用多种方式进行实现
常见的实现方式
- 有这些AR(active Record)机制实现了ORM思想
- 在laravel 里面也使用Eloquent ORM是实现ORM思想
相关:http://www.cnblogs.com/52fhy/p/5353181.html
AR机制操作数据
思想:
在控制器的方法里面实例化模型,为对象的字段属性进行赋值,然后调用add方法进行入库数据
public function test(){
$goodsModel=D('Goods');
//使用ar机制擦汗如数据
$goodsModel->goods_name = 'new Goods';
$goodsModel->goods_sn = uniqid();
$goodsModel->goods_price = 12.33;
$goodsModel->goods_number = 122;
$rs = $goodsModel->add();
dump($rs);
}
}
注意:由于我们使用的自定义的模型类,则我们在实例化的时候需要使用D进行实例化,因为M实例化的是系统Modele.class.php
思考:我们之前是给add传递一个数组进行输入的插入
那么这两种方式到底有啥区别或者是联系?
322通过AR的机制和数组方式其底层都是一样的。只是AR方式使用的时候,会触发一个 set的魔术方法进行对象的属性赋值操作。赋值给模型对象的一个$data属性,并且这个属性在TP里面叫做数据对象(主要是保存要插入到数据库的信息)模型字段的分析
如果项目上线,则就不是调试模式,则看配置文件中DB_FIELDS_CACHE项如果为true则直接读取缓存,存在I0开销
- 如果没有上线,则为调试模式,则需要查看debug.php配置文件里面的里面的
DB_FIELDS_CACHE 项,如果为true则直接读取,如果为false则去数据库获取步骤:Model.class.php——> construct() ==>$this->db()——> $this->_checkTablelnfo—->
$this->db->getFieldsO—-> mysql.class.php,存在链接数据库,数据库开销
注意:如果我们的模型里面定义$fields属性,则以我们定义的为准优先级最高但是注意一般上线之后开启,本地调试不建议开启,建议每次查询数据库,因为本地开发的时候字段可能会不断的变化。
模型的查询
链式调用 -field
public function test4()
{
//只需要获取商品的名称
$goodsModel = D('Goods');
//链式调用 获取指定字段的值
$goodsData= $goodsModel->field('goods_name,goods_id')->select();
dump($goodsData);
}
where
order
获取最后一次执行的SQL语句
链式调用-链表操作
原生sql执行
注意:这里我们使用空模型的query方法完成了查询操作。如果我们要做查询则使用query
如果要执行insertlupdateldelete则需要使用execute方法转换成链式操作
模型更新
按主键
按其他字段
public function test11(){
$goodsModel= D('Goods');
$updateData =array(
// 待更新的条件
//待更新的数据
'goods_name'=> 'my new data',
'goods_price'=> 12.23,
);
//待更新的条件
$option= array(
'where'=> array('goods_name'=>'my new data'),
);
$rs = $goodsModel->save($updateData);
dump($rs);
}