Home » php

PEAR DB_DataObject 简介

11 02月 2010 Views: No Comment Tags:

DB_DataObject将数据表封装成对象,所有对数据库的操作转化为对象的操作。
使用DataObject,完全不用跟SQL打交道。特别在需要修改数据库结构的时候,例如增加或删除表和字段、改名、更改表间关系,在设计一个稍为复杂的系统时,这些情况都会经常出现。使用DataObject,只需修改很少的几个地方,不用去修改讨厌的SQL语句。再配合其它几个类,例如FormBuilder,DataGrid,就能够用很简单的几行代码实现数据输入和输出显示等复杂功能。
很多人使用DB类,因为DB类隐藏了不同数据库的差异。但是你还是要直接使用SQL语句。DataObject在DB的基础上进一步抽象,隐藏了数据库。

依赖关系

需要DB类的支持;DataObject_formBuilder依赖本类。

优点与缺点

面向对象操作数据库,提高开发效率,适应变化,适合于迭代式开发。执行效率略低。

快速开始

注意:由于Zend存在的一个bug,如果使用Zend,必须将 DataObject.php文件中第121行

define(‘DB_DATAOBJECT_NO_OVERLOAD’,true);

的注释符去掉;或在每个用到DataObject的文件的前面加上这句。原文还漏了“;”,记得加上。如果初次运行浏览器死锁或出现找不到页面,多半是这个问题。

在mysql中建立数据库

例如

CREATE TABLE IF NOT EXISTS `hr_employee` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`name` varchar(20) NOT NULL default '',
`section_id` tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
) TYPE=MyISAM COMMENT='员工表';
CREATE TABLE IF NOT EXISTS `hr_section` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`name` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) TYPE=MyISAM COMMENT='部门表' ;
 
CREATE TABLE IF NOT EXISTS `hr_project` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`name` varchar(60) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) TYPE=MyISAM COMMENT='项目表' ;
 
CREATE TABLE IF NOT EXISTS `hr_employee_project` (
`id` int(11) unsigned NOT NULL auto_increment,
`employee_id` smallint(5) unsigned NOT NULL default '0',
`project_id` smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `employee_id` (`employee_id`,`project_id`)
) TYPE=MyISAM COMMENT='员工-项目表';

创建DataObject.ini

 [DB_DataObject]
 database = mysql://user:password@server/database 
 schema_location = /DataObjects
 class_location  = /DataObjects
 require_prefix  = /DataObjects/

创建 CreateDataObjectClasses.php

<?php
   //注意设置好你的pear包含路径
   require_once 'd:/www/Pear/DB/DataObject/Generator.php';
   $config = parse_ini_file("D:\www\hr\DataObjects\DataObject.ini", true);
       $options = &PEAR::getStaticProperty('DB_DataObject','options');
   $options = $config['DB_DataObject'];
       if (!$options) {
       PEAR::raiseError("\n错误:无法读取ini文件\n\n", null, PEAR_ERROR_DIE);
       exit;   
       }
   set_time_limit(0);
   DB_DataObject::debugLevel(1);
   $generator = new DB_DataObject_Generator;
   $generator->start();
 ?>

运行 CreateDataObjectClasses.php
在DataObjects目录中自动为数据库中每个表生一个 DataObject的子类,存为相应的php文件。

自动生成一个db.ini配置文件,db是你的数据库的名字。这个文件保存了每个表中各字段类型信息,用数字表示,是自动生成的,请不要修改这个表。
创建db.link.ini

 [hr_employee] section_id = hr_section:id 
[hr_employee_project] employee_id = hr_employee:id 
project_id = hr_training_project:id 
[hr_project] id = hr_employee:id

上述步骤看起来复杂,做好了一切就简单了。这可以我摸索了近半个月才搞清楚的。

现在可以开始了。

 <? 
//取单个表的数据
 $employee = new Hr_employee;
 $employee->name = '张三';
 $employee->find(ture);
 echo '员工'.$employee->name.'的职务是'.$employee->position.', ';
    //取多对一关系的数据
  $employee->getLinks();
   echo '工作部门是'.$employee->_section_id->name.',';
   //取多对多关系的数据 echo '参加的项目包括';
 $e_p = new Hr_employee_project;
 $e_p->employee_id = $employee->id;
 $e_p->find();
 while ($e_p->fetch()) {   $project = $e_p->getLink('project_id');
    echo $project->name.'、';
 }
 echo '。'; 
?>

原创文章如转载,请注明:转载自Xixis Blog [ http://www.xixis.net/ ]
本文链接地址:http://www.xixis.net/archives/about-pear-db_dataobject.html

Pages: 1 2

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.