Propel ORM Plus Phing On Windows

今天试用了传说中的Propel,感觉相当好,果然是个不错的ORM。不过它依赖于Phing,正好这两个项目都是BullSoft关注的项目。现在我就来讲下如何配置环境,两个项目都支持Pear安装,但是今天无论如何也装不上Phing,所以就讲讲单独安装的过程吧。

  1. 下载两个包

项目官方站地址分别是http://www.propelorm.orghttp://www.phing.info/trac/。由于Propel由两部分组成,一部分用于生成Model,一部分用于使用Model,所以在此我们把生成Model的部分提取出来,也就是propel的generator文件夹,改名为propel和phing统一放在D:\phing目录下。

  1. 添用户自定义环境变量,把=号后面的改成你实际的环境
    #PHP执行文件目录
PHP_COMMAND=d:\php\php.exe

//phing根目录
PHING_HOME=d:\phing\phing
#propel根目录
PROPEL_HOME=d:\phing\propel
//phing的类目录
PHP_CLASSPATH=d:\phing\phing\classes
  1. 打开cmd,输入
PATH %PATH%;%PHING_HOME%\bin;%PROPEL_HOME%\bin

现在你就可以直接使用propel-gen和phing命令了,不过这是临时的,关闭cmd窗口后就会失效。

  1. 使用propel建立项目

新建一个文件夹如:bookstore 新建文件schema.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
 2 <database name="bookstore" defaultIdMethod="native">
 3   <table name="book" phpName="Book">
 4     <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
 5     <column name="title" type="varchar" size="255" required="true" />
 6     <column name="isbn" type="varchar" size="24" required="true" phpName="ISBN"/>
 7     <column name="publisher_id" type="integer" required="true"/>
 8     <column name="author_id" type="integer" required="true"/>
 9     <foreign-key foreignTable="publisher" phpName="Publisher" refPhpName="Book">
10       <reference local="publisher_id" foreign="id"/>
11     </foreign-key>
12     <foreign-key foreignTable="author">
13       <reference local="author_id" foreign="id"/>
14     </foreign-key>
15   </table>
16   <table name="author" phpName="Author">
17     <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
18     <column name="first_name" type="varchar" size="128" required="true"/>
19     <column name="last_name" type="varchar" size="128" required="true"/>
20   </table>
21   <table name="publisher" phpName="Publisher">
22    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
23    <column name="name" type="varchar" size="128" required="true" />
24   </table>
25 </database>

使用以下命令生成模型文件:

propel-gen om

可以在bookstore/build/classes/bookstore/下找到生成的模型文件

新建build.properties文件

    # Database driver
propel.database = mysql

# Project name
propel.project = bookstore

# Connection parameters
propel.database.url = mysql:host=localhost;dbname=my_db_name
propel.database.user = my_db_user
propel.database.password = my_db_password

# Other examples:
# propel.database.url = sqlite:/path/to/bookstore.db
# propel.database.url = pgsql:host=localhost dbname=my_db_name user=my_db_user password=my_db_password

使用以下命令生成SQL文件:

propel-gen sql

可以在bookstore/build/sql/下找到相关的SQL文件 使用以下命令生成表(插入SQL)

propel-gen insert-sql

新建runtime-conf.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <!-- Uncomment this if you have PEAR Log installed
  <log>
    <type>file</type>
    <name>/path/to/propel.log</name>
    <ident>propel-bookstore</ident>
    <level>7</level>
  </log>
  -->
  <propel>
    <datasources default="bookstore">
      <datasource id="bookstore">
        <adapter>mysql</adapter> <!-- sqlite, mysql, myssql, oracle, or pgsql -->
        <connection>
          <dsn>mysql:host=localhost;dbname=my_db_name</dsn>
          <user>my_db_user</user>
          <password>my_db_password</password>
        </connection>
      </datasource>
    </datasources>
  </propel>
</config>

使用以下命令生成运行时的配置文件:

propel-gen convert-conf

可以找到bookstore/build/conf/bookstore-conf.php文件

其这第2步和第3步用不着这么麻烦,我们只要在d:/phing/目录下建个bat文件就行(如:start.bat):

@echo off
@setlocal
set PHP_COMMAND=d:\php\php.exe
set PHING_HOME=d:\phing\phing
set PROPEL_HOME=d:\phing\propel
set PHP_CLASSPATH=d:\phing\phing\classes
PATH %PATH%;%PHING_HOME%\bin;%PROPEL_HOME%\bin
cmd.exe