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

转载于:https://www.cnblogs.com/friday295/archive/2012/07/20/2600611.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值