首页 > 代码库 > KOHANA3.3 ORM中文详解

KOHANA3.3 ORM中文详解

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 = http://www.mamicode.com/NULL)
        and_having($column, $op, $value = http://www.mamicode.com/NULL)
        or_having($column, $op, $value = http://www.mamicode.com/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中关联字段相同,可使用该方法简化链表操作