pat 发表于 2009-3-17 16:29:02

从头细说 Kohana php 的 ORM

本帖最后由 pat 于 2009-4-1 16:15 编辑

官方支持网站:http://bsdcn.com/index.phpKohana 答疑(QQ群:58987322)
一直以来都想整理些ORM资料,现在刚好在做一个项目。利用业余时间整理+翻译一些文档。时间有限,进度可能会很慢。


对象关系映射(ORM)

    对象关系映射(ORM)允许你象操作PHP对象一样对数据库进行操作和控制。
    一旦定义好ORM之间的关系,你就可以从数据库中获取数据,操纵返回结果,保存修改后的结果到数据库中,这一切都不需要使用SQL语句。
    按照一定的转换约定建立模型之间的关系,大多数重复的SQL语句(CRUD)都可以被缩减或取消。所有的关系自动的被ORM地组织起来,以使你可以通过标准的存取方法操纵他们。

目录
[*]起步走[*]使用ORM[*]示例[*]扩充话题起步走

我应该使用ORM吗?使用ORM与否取决于你的产品需求和对性能的要求。 Kohana的ORM大大减少你在操作数据库时的代码,特别在表单提交中,建立,获取,编辑,删除等表单。ORM能加快你的开发速度、减少bug,但它不能提高SQL运行效率,事实上它可能总会降低产品的运行效率。


《待续》


《Kohana 快速上手网络培训教程》

官方支持网站:http://bsdcn.com/index.php

讲师:pat(QQ:235749),1998年至今一直从事Linux(FreeBSD) + Apache + PHP + MySQL的开发及项目工作;
授课方式:通过看文档、解读源码、实例项目相结合,进行语音、视频教学;
授课周期:一周。一周学不会者,可以继续学习;
授课时间:每天晚上8点授课,一周3次新内容,时间提前通知,学会为止;
感兴趣者,请加我的QQ:235749 及 技术交流QQ群:5898732

本通知长期有效。欢迎转发。

pat 发表于 2009-3-17 16:33:21


--
-- 表的结构 `groups`
--

CREATE TABLE IF NOT EXISTS `groups` (
`id` int(11) unsigned NOT NULL auto_increment,
`groupname` varchar(32) NOT NULL,
`description` varchar(96) NOT NULL,
`sort_id` int(10) unsigned NOT NULL default '0',
PRIMARY KEY(`id`),
UNIQUE KEY `uniq_groupname` (`groupname`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- 导出表中的数据 `groups`
--

INSERT INTO `groups` (`id`, `groupname`, `description`, `sort_id`) VALUES
(1, '组一', '', 0),
(2, '组二', '', 0);

-- --------------------------------------------------------

--
-- 表的结构 `groups_users`
--

CREATE TABLE IF NOT EXISTS `groups_users` (
`user_id` smallint(5) unsigned NOT NULL,
`group_id` tinyint(3) unsigned NOT NULL,
PRIMARY KEY(`user_id`,`group_id`),
KEY `fk_group_id` (`group_id`),
KEY `fk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 导出表中的数据 `groups_users`
--

INSERT INTO `groups_users` (`user_id`, `group_id`) VALUES
(1, 1),
(1, 2);

-- --------------------------------------------------------

--
-- 表的结构 `roles`
--

CREATE TABLE IF NOT EXISTS `roles` (
`id` int(11) unsigned NOT NULL auto_increment,
`parent_id` int(11) unsigned NOT NULL default '0',
`rolename` varchar(32) NOT NULL,
`controller` varchar(32) NOT NULL,
`function` varchar(32) NOT NULL,
`sort_id` int(10) unsigned NOT NULL default '0',
`description` varchar(255) NOT NULL,
PRIMARY KEY(`id`),
UNIQUE KEY `uniq_rolename` (`rolename`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- 导出表中的数据 `roles`
--

INSERT INTO `roles` (`id`, `parent_id`, `rolename`, `controller`, `function`, `sort_id`, `description`) VALUES
(1, 0, '基本功能', '', '', 0, ''),
(2, 1, '登录', 'user', 'login', 0, ''),
(3, 1, '修改密码', 'user', 'password', 0, ''),
(4, 2, '超级登录', 'user', 'supper', 0, '');

-- --------------------------------------------------------

--
-- 表的结构 `roles_users`
--

CREATE TABLE IF NOT EXISTS `roles_users` (
`user_id` smallint(5) unsigned NOT NULL,
`role_id` tinyint(3) unsigned NOT NULL,
PRIMARY KEY(`user_id`,`role_id`),
KEY `fk_role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 导出表中的数据 `roles_users`
--

INSERT INTO `roles_users` (`user_id`, `role_id`) VALUES
(1, 2),
(1, 3);

-- --------------------------------------------------------

--
-- 表的结构 `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL auto_increment,
`username` varchar(32) NOT NULL,
`password` char(32) NOT NULL,
`sort_id` int(10) unsigned NOT NULL default '0',
`created` datetime default NULL,
`updated` datetime default NULL,
PRIMARY KEY(`id`),
UNIQUE KEY `uniq_username` (`username`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- 导出表中的数据 `users`
--

INSERT INTO `users` (`id`, `username`, `password`, `sort_id`, `created`, `updated`) VALUES
(1, 'pat', '', 0, NULL, NULL),
(2, 'pat2', '', 0, NULL, NULL),
(3, 'pat3', '', 0, NULL, NULL);

pat 发表于 2009-3-17 16:34:50

本帖最后由 pat 于 2009-3-17 16:39 编辑

2#楼(沙发)中建立了几个表结构是下文要用到的。

用户\组\角色

这里忽略数据类型,所以不用管InnoDB还是其他。

先建立几个表之间的关系。



<?php
class Model_User extends ORM {
        protected $has_many = array('logs');
        protected $has_and_belongs_to_many = array('groups', 'roles');
}






<?php
class Model_Role extends ORM_Tree {
        protected $has_and_belongs_to_many = array('users');
        protected $children = 'roles';
}






<?php
class Model_Group extends ORM {
        protected $has_and_belongs_to_many = array('users');

}

pat 发表于 2009-3-17 16:41:04

占位。占位。

胡屹 发表于 2010-6-30 11:44:50

怎么不继续讲了呢,期待后面的内容。

相知犹按剑 发表于 2012-2-16 22:52:24

广告
页: [1]
查看完整版本: 从头细说 Kohana php 的 ORM