orm层
本层提供对数据库的良好操作,目的在于使业务逻辑更加独立于数据操作层 建议尽量在model里完成业务逻辑而不是在orm层
- ORM 概念及一般使用方式不在描述,具体参阅百度搜索结果
- ORM 上分了两块,ORM及Entity 不合并为一个是为效率考虑,尤其列表尤为明显 *. ORM类实现对表操作 *. Entity为表记录对象
- 支持查询时存在非表字段数据和相关表一次查询并生成关联Entity 具体参见dome
- ORM 提供两种使用方式,一种运行效率高,一种编写更加方便
- 使用参考 /dome/orm.php
- ORM不建议对外服务调用,建议在抽象一层model来对外提供服务 如: dome/Model/OrderModel.php 但一般现在框架都自带一个抽象的model层 如 yaf的model
- 如果你需要极高的运行效率和及最轻量级的封装而不是编码时的方便,请使用
shanliu/lsqlutils
包,常用的数据封装操作可以满足你的需求,如果你需要一个更复杂的orm,甚至连数据库定义的实现都希望在orm层完成,请使用doctrine/orm
可能是最完整也是最臃肿的orm框架,如果你需要一个使用灵活而不臃肿orm层.你可使用本类库 - 注意:比上一版本慢1/3,因为重写了 __get 和 __set 方法,需要监控修改数据.目前没找到其他好办法.
默认没有集成数据库层驱动,你需要添加
shanliu/lorm-db
数据库层驱动依赖或实现自己的数据库驱动层
目的:已抽离数据库操作层,可自行定义,方便融合进各种现有的框架
- 直接使用默认的数据库操作层[shanliu/ldb]
> composer require shanliu/lorm-db
-
自定义数据库操作层
- 实现 LSYS\ORM\Result 和 LSYS\ORM\Database 接口即可
- 示例可参考:src/classes/LSYS/Database 下的实现
-
YII2驱动层封装
示例代码:
方式1
//注意:如果你注重代码效率,不建议使用,请直接看下一种方法
//此方法无需预先生成ORM,只需提供表名
//在运行时分析表结构及动态创建属性
$table_name="order";
$order=new LSYS\ORM\Active($table_name);
$e=$order->where("id", "=", 1)->find();
if ($e->loaded()){
echo $e->id;
print_r($e->as_array());
}
// 方法调用跟方式2相同,参见方式2:
方式2
//此方式需预先根据数据库生成对应的ORM
//运行时不需要解析表及动态建立属性,效率高
//生成ORM有对应的辅助工具,为了更好管理代码,建议继承生成类进行操作
//参数: 生成ORM对应的存放命名空间 存放ORM的目录 不需要的表数组 链接数据库
命令行生成ORM[依赖shanliu/lorm-db包]
// --namespace 存放命名空间
// --save_dir 存放目录
// --config_dir 配置文件目录
// --config_db 数据库配置节点
// --save_dir 存放目录
// --split 是否拆分自动生成的代码
// --dis_table 过滤的表名
./bin/lorm --namespace=ORM --dir=./ --split=true
ORM具体使用
//示例参阅: dome/orm.php
ORM 配置说明
//----------------------ORM关系配置---------------------
参考 :dome/ORM/ORMOrder.php
1. 本身存对方主键
_belongs_to['访问键']=array(
"model"=>"对方模型名",
"far_primary_key"=>"对方主键字段名",
"foreign_key"=>"本身存对方键的字段名",
);
2. 对方有字段存本身主键
_has_one['访问键']=array(
"model"=>"对方模型名",
"primary_key"=>"本身主键字段名",
"foreign_key"=>"对方存本身主键的字段名"
)
3. 对方存本身主键 ,但对方有多条记录
1. 不通过关系表
_has_many['访问键']=array(
"model"=>"对方模型名",
"foreign_key"=>"对方存本身主键的字段名",
"primary_key"=>"本身主键字段名",
)
2. 通过关系表
_has_many['访问键']=array(
"model"=>"对方模型名",
"through"=>"关系表名",
"far_key"=>"关系表存对方主键的字段名",
"foreign_key"=>"关系表存本身主键的字段名",
"primary_key"=>"本身主键字段名",
"far_primary_key"=>"对方主键字段名"
)
4. 配置完调用为: $e->'访问键'; 即可得到对应的ORM对象
可在对应orm上加php注释实现提示