zoukankan      html  css  js  c++  java
  • Kohana 之ORM文档篇

    ORM 我的理解就是关系数据对象模型,就是把数据库记录映射成对象,把对数据库的操作转化为对对象的操作,

    有时候感觉很累赘,不灵活,某种程度上来说也是有好处的,有高手有更好理解的,欢迎拍砖

    ORM这个玩意据说在单元测试下不是很理想,没有实际测过,单元测试耗时间,

    加上上面只关心结果不关心过程的压力下,放弃测试,管他呢

    下面说说实际使用,TNND,官网连个ORM的教程都不出,搞的我摸黑

    建立ORM原型,在model下

    <?php defined('SYSPATH') or die('No direct access allowed.');
    
    class Model_Mytest extends ORM {
    	protected $_rules = array(
    		'a' => array(
    			'not_empty'  => NULL,
    			'min_length' => array(1),
    			'max_length' => array(255),
    		),
    		'b' => array(
    			'max_length' => array(10),
    		),
    	);
    
    } 
    还有很多其他的设置,不在介绍,自己看代码去,呵呵
    建立一个表:
    CREATE TABLE IF NOT EXISTS `ko_mytests` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `a` char(255) NOT NULL,
      `b` char(10) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  

    在控制器中使用:
    <?php
    $orm=ORM::factory("mytest");
    print_r($orm-> find(1)->as_array());

    结果打印:(我表里有随便填的数据)
    Array ( [id] => 1 [a] => aaaaaa [b] => aaaaaaaaaa ) ;
     
    还有非常多方法,不介绍啦.自己翻手册,有时间在下面补上吧.
     
    $orm->delete(1);//删除指定ID
    $orm->delete_all()//删除整个表记录
    echo ($orm->count_all());//得到表总记录
    $orm->last_query()//最后一次请求的SQL
    $orm->list_columns()//取得字段名
    ........
    这里附上官网的一些说明:
    下面的属性是用于配置每个模型的:
    类型 属性 描述 默认值
    string _table_name 表名 singular model name
    string _db 数据库配置名 default
    string _primary_key 主键 id
    string _primary_val 主键值 name
    bool _table_names_plural 表名是否是复数形式 TRUE
    array _sorting 列名 => 排序方向的数组 primary key => ASC
    string _foreign_key_suffix 外键的后缀 _id


    加载一条记录:

    // 加载 ID 为 5 的用户

    $user = ORM::factory('user', 5);// 检查用户是否加载成功

    // 加载 email 为 oe@example.com 的用

    $user = ORM::factory('user', array('email' => 'joe@example.com'));

    if ($user->loaded()) { ... }//用于判断加载记录是否成功

    //搜索活跃用户中名为 Bob 的第一条记录

    $user = ORM::factory('user')

    ->where('active', '=', TRUE)  

    ->where('name', '=', 'Bob')

    ->find();// 搜索名为 Bob 的所有用户$users = ORM::factory('user')    ...

    ->find_all();

    //当你使用 ORM::find_all 搜索一批记录模型,你可以使用迭代从数据库结果中获取每条记录模型:

    foreach ($users as $user){    ...}

    ORM 一个强大的特性是 ORM::as_array 方法,它把返回的记录集转为为一个数组。如果使用了 ORM::find_all 所有的记录都会以数组的形式返回。对于选择列的时候是非常好用的:

    // 显示选择列的用户名 (使用 id 作为其值)

    ORM::factory('user')->find_all()->as_array('id', 'username');

    // 用户的记录数

    $count = ORM::factory('user')->where('active', '=', TRUE)->count_all();

    所有的模型属性都可以通过 PHP 的魔法方法 __get__set 得到读写权。


    $user = ORM::factory('user', 5);// 输出用户名echo $user->name;// 更改用户名


    $user->name = 'Bob';

    假如保存的信息/属性并不存在于模型表中,使用 _ignored_columns 来忽略数据成员。

    protected $_ignored_columns = array('field1', 'field2', ...);

    使用 ORM::values 方法设置键-值型数组

    $user->values(array('username' => 'Joe', 'password' => 'bob'));

    创建并存储记录

    // 创建新记录

    $user = ORM::factory('user');

    $user->name = 'New user';

    $user->save();

    // 更新现有记录

    $user = ORM::factory('user', 5);

    $user->name = 'User 2';

    $user->save();// 检查记录是否保存成功

    if ($user->saved()) { ... }

    $user = ORM::factory('user');

    $user->name = 'Bob';// 更新所有结果记录的名字为 'Bob'

    $user->where('active', '=', TRUE)->save_all();

    使用 UpdatedCreated

    _updated_column_created_column 变量是用于当模型更新或插入新纪录的时候自动更新设置的字段值。

    默认没有使用。如果你想使用:

    // date_created 列用于储存创建的时间,使用 TRUE 保存的是时间戳(timestamp)

    protected $_created_column = array('date_created' => TRUE);

    // date_modified 列用于储存最后修改时间。这里的时间设置为使用 date() 格式后的字符串

    protected $_updated_column = array('date_modified' => 'm/d/Y');

    (关联有点乱,不介绍~,自己看~)

    校验:

    ORM 和 Validate 类是紧密结合使用的。ORM 提供以下几种校验方式:(ORM模型里自己添加该属性)

    • _rules
    • _callbacks
    • _filters
    • _labels

    _rules

    protected $_rules = array(    'username' => array('not_empty' => array()),

    'email' => array('not_empty' => array(), 'email' => array()),);

    检测并确保 username 字段不为空。检测 email 字段不为空且是有效的 Email 地址格式。

    那些传递空值数组用于提供可选的额外参数到校验方法中使用。

    _callbacks

    protected $_callbacks = array(    'username' => array('username_unique'),);

    username 字段被传递到了 username_unique 回调函数。如果方法存在于当前模型它就会被调用,否则调用全局函数。.

    下面有个小例子:

    public function username_unique(Validate $data, $field){    // 确保 username 是唯一的

    ...}

    _filters:

    protected $_filters = array(    TRUE       => array('trim' => array()),

    'username' => array('stripslashes' => array()),);

    TRUE 值代表 trim 过滤器应用到所有字段。而 username 字段则在校验前使用 stripslashes 过滤。那些传递空值数组用于提供可选的额外参数到校验方法中使用。

    检测对象是否通过校验:

    if ($user->values($_POST)->check()){

    $user->save();}

    你也可是使用 validate() 方法直接访问模型的校验对象:

    // 手动添加额外的过滤器

    $user->validate()->filter('username', 'trim');

  • 相关阅读:
    强引用、软引用、弱引用、幻象引用有什么区别?
    vue基础指令学习
    如何设计一个自动化测试框架
    测试工程师需要了解的shell变量知识
    记一次kubernetes集群异常: kubelet连接apiserver超时
    golang http/transport 代码分析
    logging in kubernetes
    tune kubernetes eviction parameter
    kubernetes continually evict pod when node's inode exhausted
    Compile git version inside go binary
  • 原文地址:https://www.cnblogs.com/liushannet/p/1806281.html
Copyright © 2011-2022 走看看