`
rikugun
  • 浏览: 350363 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

关注PHP的ORM框架 -- propel

    博客分类:
  • PHP
阅读更多
最近在看PHP的 rails式的框架 symfony,这是个整合的框架,ORM框架用的是 propel.基于xml配置的PHP ORM.
粗略的看了一下还是比较勥的.
官方文档

支持: 至少php 5.2.x
Lisense : lgpl v3

安装:
推荐使用pear 安装. 需要 phing 支持

//添加更新源
pear channel-discover pear.phpdb.org
pear channel-discover pear.phing.info

//安装propel生成器,类似hibernate
pear install  --alldeps phpdb/propel_generator

//安装运行支持库
pear install --alldeps  phpdb/propel_runtime


从现有的数据库中迁移:
propel支持从现有的数据库结构中生成 schema.xml .可以使用 自带的引擎
propel-gen ./ reverse
或者 cropel
propel-gen ./ creole

需要一个配置文件 build.properties
propel.project = 项目名称

# The Propel driver to use for generating SQL, etc.

propel.database = mysql

# This must be a PDO DSN
propel.database.url = mysql:dbname=test
propel.database.user = root
# propel.database.password = 


迁移时可以使用
propel-gen ./ sql
来迁移数据库结构
当然也可以使用
propel-gen ./ datadump
将数据导出来
详细说明请看 这里

---------------------------------我是分割线----------------------------


配置:
类似hibernate,propel也需要一个映射的配置文件 schema.xml
查看它的DTD

根节点
<database name="bookstore" defaultIdMethod="native">
</database>


看一个简单的例子

schema.xml
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!-- 配置数据库名 -->
<database name="bookstore" defaultIdMethod="native">
<!-- 配置实体对应的表 -->
 <table name="book" description="Book Table">
<!-- 配置实体熟悉对应的列  -->
  <column name="book_id" type="integer" primaryKey="true" autoIncrement="true" required="true" description="Book Id"/>
  <column name="title" type="varchar" size="255" required="true" description="Book Title"/>
  <column name="isbn" type="varchar" size="24" required="true" phpName="ISBN" description="ISBN Number"/>
  <column name="publisher_id" type="integer" required="true" description="Foreign Key for Publisher"/>
  <column name="author_id" type="integer" required="true" description="Foreign Key for Author"/>
<!-- 配置实体对应的关系 这里是one to one-->
  <foreign-key foreignTable="publisher">
   <reference local="publisher_id" foreign="publisher_id"/>
  </foreign-key>
  <foreign-key foreignTable="author">
   <reference local="author_id" foreign="author_id"/>
  </foreign-key>
 </table>

 <table name="publisher" description="Publisher Table">
  <column name="publisher_id" type="integer" required="true" primaryKey="true" autoIncrement="true" description="Publisher Id"/>
  <column name="name" type="varchar" size="128" required="true" description="Publisher Name"/>
 </table>

 <table name="author" description="Author Table">
  <column name="author_id" type="integer" required="true" primaryKey="true" autoIncrement="true" description="Author Id"/>
  <column name="first_name" type="varchar" size="128" required="true" description="First Name"/>
  <column name="last_name" type="varchar" size="128" required="true" description="Last Name"/>
 </table>

</database>


运行propel的时候需要另一个配置文件 runtime-conf.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<config>
 <!-- 如果安装了 pear Log 可以注销这部分. 用来保存pear的错误
 <log>
  <type>file</type>
  <name>/path/to/prople.log</name>
  <ident>propel-bookstore</ident>
  <level>7</level>
 </log>
 -->
 <propel>

<!-- 配置数据源 -->
  <datasources default="bookstore">
   <datasource id="bookstore"> <!-- this ID must match <database name=""> in schema.xml -->
    <adapter>sqlite</adapter> <!-- sqlite, mysql, myssql, oracle, or pgsql -->
    <connection>
     <dsn>sqlite2:/path/to/bookstore.db</dsn> <!-- the PDO connection DSN for database -->
    </connection>
   </datasource>
  </datasources>
 </propel>
</config>


更多配置说明

---------------------------------我是分割线----------------------------


使用:
终于到使用这个方便的框架的时候了,所有操作都和hibernate非常相似
首先在使用的脚本前加载库,可以放在你的应用的启动器里头

// 设置domain类所在的文件夹 这里假设在build/classes里面.
set_include_path("/path/to/bookstore/build/classes" . PATH_SEPARATOR . get_include_path());

require_once 'propel/Propel.php';

Propel::init("/path/to/bookstore/build/conf/bookstore-conf.php");



一些常用的操作: C.R.U.D 引用
include_once 'build/class/Author.php';

//新建
$author = new Author();
$author->setFirstName("Jack");
$author->setLastName("London");
$author->save();

//获取, AuthorPeer: AuthorPeer 相当域pojo的域类,包含了curd的静态方法, 是自动生成的
$author = AuthorPeer::retrieveByPK(1);

//查询
$c = new Criteria();
$c->add(AuthorPeer::FIRST_NAME, "Karl");
$c->add(AuthorPeer::LAST_NAME, "Marx", Criteria::NOT_EQUAL);

$authors = AuthorPeer::doSelect($c);
 //或 查询

$c = new Criteria();
$cton1 = $c->getNewCriterion(AuthorPeer::FIRST_NAME, "Leo");
$cton2 = $c->getNewCriterion(AuthorPeer::LAST_NAME,  array("Tolstoy", "Dostoevsky", "Bakhtin"), Criteria::IN);
 
// combine them
$cton1->addOr($cton2);
 
// add to Criteria
$c->add($cton1);

//直接使用SQL
$con = Propel::getConnection(DATABASE_NAME);

$sql = "SELECT books.* FROM books WHERE NOT EXISTS (SELECT id FROM review WHERE book_id = book.id)";  
$stmt = $con->prepare($sql);
$stmt->execute();

$books = BookPeer::populateObjects($stmt);

//删除
$author = AuthorPeer::retrieveByPK(1);
AuthorPeer::doDelete($author);
//或者
$author->delete();
1
0
分享到:
评论

相关推荐

    Laravel开发-propel-eloquent

    然而,集成Propel-Eloquent也可能带来一些挑战,如性能和兼容性问题,因为两个ORM系统可能会在某些方面存在冲突。因此,你需要权衡利弊,确保选择最适合项目的解决方案。 总结起来,"Laravel开发-propel-eloquent...

    Laravel开发-propel-laravel

    "Laravel开发-propel-laravel"这个主题涉及到的是将Propel ORM(对象关系映射)与Laravel框架整合的过程。Propel ORM是另一个开源项目,它允许开发者使用面向对象的方式来操作数据库,而无需关注底层SQL的细节。 ...

    Propel - PHP object persistence-开源

    9. **版本管理**:Propel-1.0.0beta1表明这是该框架的一个早期版本,可能包含一些实验性的特性和功能。随着时间的发展,Propel不断更新,引入更多改进和优化。 在实际开发中,Propel通常与MVC(模型-视图-控制器)...

    angjs-propel-slim:这是一个简单的脚本,有助于使用 PropelORM + SLIM 作为 PHP REST 服务器编写 angularJS 服务

    和 SLIM 框架的代码生成器Propel 是一个简单的 PHP ORM,可以从数据库结构中自动生成复杂的模型SLIM 是一个小型 PHP 框架,可简化 REST API 的设计和实现。 AngularJS 是一个具有双重绑定和关注点分离的 JavaScript ...

    PHP开发框架比较

    - **Propel ORM**: 整合了Propel ORM,这是一个强大的对象关系映射器,可以显著提高数据库交互效率。 - **Creole**: 用于数据库抽象层,提供了一致的数据库交互接口。 - **Mojavi**: 用于MVC模型层,增强了模型层的...

    50个非常有用的PHP工具.pdf

    - PEAR Propel:PHP5的对象关系映射(ORM)框架。 - Zend Framework:PHP5的全栈开发框架。 - Qcodo:PHP5的MVC框架,带有CRUD代码生成器。 - SAJAX:模块化的Ajax开发工具。 - Smarty:PHP的MVC模板引擎,分离...

    orm-base

    在PHP中,有许多流行的ORM库,例如 Doctrine、Eloquent(Laravel框架的一部分)、Propel 和 RedBeanPHP 等。这些ORM库提供了数据模型的定义、查询构造器、事务处理、关系管理等功能。例如,Doctrine支持使用YAML或...

    50个非常有用的PHP工具(20211010005844).pdf

    - **PEAR Propel**: PHP5的对象关系映射(ORM)框架。 - **Zend Framework**: 官方支持的全功能PHP开发框架。 - **Qcodo**: 包含MVC架构和CRUD代码生成的PHP5框架。 - **SAJAX**: 使创建Ajax应用变得简单的模块...

    20个php常用类库

    - **简介**:Propel 是另一个流行的 ORM 框架。 - **用途**:同样用于简化数据库操作,提高开发效率。 - **特点**:提供代码生成工具,可以自动生成数据库相关的代码。 ### 14. PHPExcel - **简介**:PHPExcel 是一...

    PHP实例开发源码—Ding框架 v0.zip

    7. **数据库操作**:虽然Ding框架本身可能不包含完整的ORM(对象关系映射)工具,但其灵活的设计可以方便地与其他PHP ORM库集成,如Doctrine或Propel,以实现数据库操作。 8. **模板引擎(Template Engine)**:...

    orm:ORM

    在PHP中,常见的ORM框架有: 1. **Doctrine**:Doctrine是PHP中最受欢迎的ORM之一,它提供了一个强大的实体管理器,支持SQL子查询、事务处理、事件监听等特性。 Doctrine还包含了一个用于命令行操作的工具,方便...

    20个PHP常用类库

    12. **Propel** - 另一个ORM框架,Propel旨在解决面向对象语言与关系型数据库之间的不匹配问题,它提供了一种机制,将数据库表映射到PHP类,从而简化了数据的持久化和检索过程。 13. **Outlet** - 一个用于对象关系...

    20个非常有用的PHP类库

    3. **Propel**:一个基于PHP5的对象关系映射框架,提供了一种灵活的方式来管理和操作数据库数据。 4. **Outlet**:另一个ORM实现,为PHP5提供了一个简单的数据持久化解决方案。 #### PDF生成类库 1. **FPDF**:一...

    Impel:Implel是基于PHP Propel库的Javascript to HTML 5 Object Relational Mapping Library

    2. **PHP Propel**:PHP Propel是一个开源的PHP ORM框架,它自动生成数据库访问层代码,简化了数据库操作。 3. **JavaScript到HTML 5 ORM**:ImplEL是这个领域的实现,将PHP Propel的ORM功能拓展到了前端,让...

    20个非常有用的PHP类库 加速php开发

    - Propel:PHP5的对象关系映射框架。 - Outlet:另一个ORM工具,简化数据库操作。 7. **PDF生成**: - FPDF:纯PHP类库,可用于生成PDF文档。 8. **Excel操作**: - php-excel:简单易用的Excel文件生成类。 ...

    第03章 运行 symfony1

    - Propel:ORM(对象关系映射)工具,连接业务对象和数据库操作。 - Phing:Propel的命令行接口,用于自动化构建任务。 所有这些包都被集成到Symfony中,并且它们各自的许可证可能不同。例如,pake和lime由Symfony...

    浅析十款PHP开发框架的对比

    Symfony项目是扩展性极强的开发框架,集成了Propel ORM和其他开源项目代码,为开发者提供了强大的数据库抽象层和MVC模型层支持。不过,它对PHP5以上版本的依赖以及实现某些任务的复杂性,使得它可能不适合初学者。 ...

    第08章 深入模型层1

    在本章中,我们将重点关注Symphony框架中基于对象/关系映射(ORM)的模型组件——Propel。 Propel是一个PHP的ORM库,它允许开发者使用面向对象的方式来操作数据库,而无需直接编写SQL语句。通过ORM,对象与数据库中...

    五个PHP程序员工具

    Propel是一个PHP5的ORM框架,源自Apache Torque项目。它提供了一种数据库抽象层,允许开发者以面向对象的方式处理数据库操作。通过简单的XML配置,Propel可以自动生成数据库模型类,增强了代码的灵活性和可移植性,...

Global site tag (gtag.js) - Google Analytics