Multi-Component Data Model
As of version 1.2 Propel will hopefully come along with packaging capabilities that allow you to more easily integrate Propel into a packaged or modularized application.
(Please note that this is experimental. You can help us to get it stable by testing it and providing feedback: Support)
Prerequisites
Currently, you'll need to install the current developement version of the Propel generator package from SVN, which will be in trunk/generator/ once you have checked out a bleeding-edge version from the repository (see SVN for information on how to do that).
Schema files
You can use as many schema.xml files as you want. Probably you'll want to have one schema file per package. Your schema files have to be named (*.)schema.xml, i.e. names like schema.xml, package1.schema.xml, core.package1.schema.xml are all acceptable. These files have to be located in your project directory.
In the bookstore-packaged example you'll find the following schema files:
- author.schema.xml
- book.schema.xml
- club.schema.xml
- media.schema.xml
- publisher.schema.xml
- review.schema.xml
- log.schema.xml
Each schema file has to contain a database tag that has its package attribute set to the package name where all of the tables in this schema file/database belong to.
For example, in the bookstore-packaged example the author.schema.xml contains the following database tag:
<database package="core.author" name="bookstore" [...]>
That means, that the Author OM classes will be created in a subdirectory core/author/ of the build output directory.
You can have more than one schema file that belong to one package. For example, in the the bookstore-packaged example both of the book.schema.xml and media.schema.xml belong to the same package "core.book".
The build property packageObjectModel
We have invented a build property propel.packageObjectModel that enables the packaged build process.
To switch this on, simply add the following line to your build.properties file in your project directory:
propel.packageObjectModel = true
The OM build
To run the packaged bookstore example build simply go to your Propel/generator/ directory and type:
phing -Dproject=bookstore-packaged
This should run without any complaints. When you have a look at the projects/bookstore-packaged/build/classes directory, the following directory tree should have been created:
addon/
club/
BookClubList.php
BookClubListPeer.php
BookListRel.php
BookListRelPeer.php
core/
author/
Author.php
AuthorPeer.php
book/
Book.php
BookPeer.php
Media.php
MediaPeer.php
publisher/
Publisher.php
PublisherPeer.php
review/
Review.php
ReviewPeer.php
util/
log/
BookstoreLog.php
BookstoreLogPeer.php
(The additional subdirectories map/ and om/ in each of these directories have been omitted for clarity.)
You can further tweak the location where Propel puts the created files by changing the propel.output.dir build property. By default this property is set to:
propel.output.dir = ${propel.home}/projects/${propel.project}/build
You can change it to use any other directory as your build directory.
The SQL build
When you have run the bookstore-packaged build successfully and have a look at the build/sql/ directory, you will see that for each package (that is specified as a package attribute in the schema file database tags) one sql file has been created:
- addon.club.schema.sql
- core.author.schema.sql
- core.book.schema.sql
- core.publisher.schema.sql
- core.review.schema.sql
- util.log.schema.sql
These files contain the CREATE TABLE SQL statements necessary for each package.
When you now run the insert-sql task by typing:
phing -Dproject=bookstore-packaged insert-sql
these SQL statements will be executed on a SQLite database located in the Propel/generator/test/ directory.
Running the test file
To test the generated OM classes you might wish to run a test on them.
cd test php bookstore-packaged-test.php
This will execute a series of tests for the most important features of the OM classes and should run without any errors.
Feedback
If you are missing something or if there are any errors or unexpected behaviour, please contact us:
