• 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');

  • 相关阅读:
    HDU 2888 Check Corners (模板题)【二维RMQ】
    POJ 3264 Balanced Lineup(模板题)【RMQ】
    poj 3368 Frequent values(经典)【RMQ】
    SPOJ RPLN (模板题)(ST算法)【RMQ】
    UVA 796 Critical Links(模板题)(无向图求桥)
    UVA 315 Network (模板题)(无向图求割点)
    POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】
    poj 3067 Japan 【树状数组】
    POJ 2481 Cows 【树状数组】
    POJ 1195 Mobile phones【二维树状数组】
  • 原文地址:https://www.cnblogs.com/liushannet/p/1806281.html
Copyright © 2020-2023  润新知