ORM
===
校验:
1.ORM内部为强制校验
2.ORM外部校验 (保存,更新,插入时校验)
过滤:
校验不在包含过滤功能
参数及方法变更:
1.find不在带参数
2.save拆分为create跟update,并增加校验类参数,规则为覆盖叠加
3.factory为ORM重写,可传两参数,用MODEL只有一个参数
4.find等查找不可用于已有实体的ORM
5.校验过滤规则的转变
6.unique指定字段的唯一判断函数
融合数据库操作:
数据库的CURD操作增加方法,方便使用.
方法及说明:
A:ORM自动维护
字段缓存
$_column_cache
初始化缓存配置
$_init_cache
必要校验模型
$_validation
当前操作实体
$_object
是否有更改
$_changed
原数据(从数据库获取,并未更改的数据)
$_original_values
自动加载的关系ORM
$_related
是否通过内置必要校验
$_valid
是否加载实体成功
$_loaded
是否保存成功
$_saved
排序用存放字段
$_sorting
当前对象名
$_object_name
复写辅助对象
$_object_plural
表字段
$_table_columns
当前KEY中的值
$_primary_key_value
以下为映射到数据库操作相关属性:
$_db_applied
$_db_pending
$_db_reset
$_db_builder
$_cast_data
自动加载ORM缓存字段
$_with_applied
当前orm名
$_errors_filename
B:配置值
数据库配置 (一般用于多库情况)
$_db_group
数据库对象 (一般不需要手动维护)
$_db
数据缓存恢复的时候是否从数据库中重新获取
$_reload_on_wakeup
是否使用表名的自动复数
$_table_names_plural
表中对应的KEY
$_primary_key
ORM对应表
$_table_name
关联KEY字段
$_foreign_key_suffix
自动序列化的字段
$_serialize_columns
更改时自动更新字段
$_updated_column
创建时自动插入字段
$_created_column
ORM关系:
本ORM是别ORM的附属ORM b 表示该ORM对外用的属性值, model 对应主的ORM名,
foreign_key 自身的用来存主表ORM名主键的字段名
$_belongs_to
例:$this->_belongs_to=array(‘b‘=>array(‘model‘=>‘‘,‘foreign_key‘=>‘‘));
本ORM是有附属ORM b 表示ORM属性名, model 对应的附属ORM,
foreign_key 附属表的存主ORM key的字段,并且是一对一关系
$_has_one
例:$this->_has_one =array(‘b‘=>array(‘model‘=>‘‘,‘foreign_key‘=>‘‘));
本ORM是有附属ORM b 表示ORM属性名, model 对应的附属ORM,
foreign_key 附属表的存主ORM key的字段,是一对多关系 OR
本ORM是有附属ORM且通过第3方表链接 ORM对外用的属性值 ,model 对应的附属ORM ,
foreign_key 关系表存主ORMKEY的字段,through 关系表名 far_key 附属表存关系表KEY的字段名
$_has_many
例:$this->_has_many=array(‘orm‘=>array(‘model‘=>‘‘,‘foreign_key‘=>‘‘));
例:$this->_has_many=array(‘orm‘=>array(‘model‘=>‘‘,‘foreign_key‘=>‘‘,‘through‘=>‘‘,‘far_key‘=>‘‘));
//---------------------------------------------------------------------
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"=>"对方主键字段名"
)
//---------------------------------------------------------------------
自动加载ORM,当查询时自动加载关联的ORM
支持跨ORM加载语法为ORM1:ORM2
$_load_with
例:$this->_load_with=array("user:tags"); 通过user在得到user tags
ORM必要校验规则,返回为数组,详情查看校验类说明
rules()
数据过滤规则,返回为数组,规则跟校验相同
参数为:
filters()
字段可读字符转化,返回数组,一维字段列表
labels()
C:可用方法 (说明:参数说明)
得到一个ORM:ORM名,条件
factory($model, $id = NULL)
得到一个ORM:条件
__construct($id = NULL)
重新加载表字段
reload_columns($force = FALSE)
清空一个ORM
clear()
重新加载数据
reload()
得到ORM KEY
__toString()
序列化ORM
serialize()
反序列化ORM:ORM序列化字符
unserialize($data)
判断字段是否有更改:指定字段
changed($field = NULL)
取得一个字段:字段名
get($column)
设置一个字段:字段名,字段值
set($column, $value)
设置一批字段:字段关系数组,需要的字段(默认为表字段)
values(array $values, array $expected = NULL)
转化为数组
as_array()
快捷取跨关系ORM:ORM关系路径(orm1:orm2)
with($target_path)
获取一个ORM
find()
获取一批ORM
find_all()
数据过滤规则:过滤字段,过滤的函数名,规则跟RULE一样
run_filter($field, $value)
检查数据是否符合规则,抛ORM校验异常:校验类(覆盖叠加)
check(Validation $extra_validation = NULL)
创建一个ORM,抛ORM校验异常:校验类(覆盖叠加)
create(Validation $validation = NULL)
修改一个ORM,抛ORM校验异常:校验类(覆盖叠加)
update(Validation $validation = NULL)
修改或创建一个ORM,抛ORM校验异常:校验类(覆盖叠加)
save(Validation $validation = NULL)
删除一个ORM,需有ORM实体
delete()
判断是否存在ORM关系:ORM名,关联字段(默认为ORM配置)
has($alias, $far_keys = NULL)
判断是否存在ORM关系(全部关系扫描):ORM名,关联字段(默认为ORM配置)
has_any($alias, $far_keys = NULL)
汇总关系数量:orm名,关联字段(默认为ORM配置)
count_relations($alias, $far_keys = NULL)
添加一个关系,存在抛数据库异常:orm名,关联字段(默认为ORM配置)
add($alias, $far_keys)
移除一个关系:orm名,关联字段(默认为ORM配置)
remove($alias, $far_keys = NULL)
查询总数
count_all()
获得字段列表
list_columns()
得到KEY
pk()
最后一个请求的SQL
last_query()
查询指定字段是否存在指定值(用于唯一判断):字段名,值
unique($field, $value)
获取属性或配置的方法
object_name()
object_plural()
loaded()
saved()
primary_key()
table_name()
table_columns()
has_one()
belongs_to()
has_many()
load_with()
original_values()
created_column()
updated_column()
validation()
object()
errors_filename()
rules()
filters()
labels()
数据库操作映射
where($column, $op, $value)
and_where($column, $op, $value)
or_where($column, $op, $value)
where_open()
and_where_open()
or_where_open()
where_close()
and_where_close()
or_where_close()
order_by($column, $direction = NULL)
limit($number)
distinct($value)
select($columns = NULL)
from($tables)
join($table, $type = NULL)
on($c1, $op, $c2)
group_by($columns)
having($column, $op, $value = NULL)
and_having($column, $op, $value = NULL)
or_having($column, $op, $value = NULL)
having_open()
and_having_open()
or_having_open()
having_close()
and_having_close()
or_having_close()
offset($number)
cached($lifetime = NULL)
param($param, $value)
数据绑定,即查询SQL中的一些字符替换
using($columns)
如果两个ORM中关联字段相同,可使用该方法简化链表操作
KOHANA3.3 ORM中文详解