从头细说 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
本通知长期有效。欢迎转发。
--
-- 表的结构 `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: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');
}
占位。占位。 怎么不继续讲了呢,期待后面的内容。 广告
页:
[1]