マルチコンポーネントデータモデル

バージョン1.2に関してPropelはPropelをパッケージ化もしくはモジュール化されたアプリケーションにより簡単に統合するパッケージング機能を伴っています。

(これは実験であることにどうぞご注意下さい。テストとフィードバックをして下されば安定化のための手助けになります: Support)

前提条件

SVNからPropelジェネレータパッケージの現在の開発バージョンをインストールする必要がある場合、trunk/generator/にあるリポジトリからチェックアウトします(どのように行うのかはSVNをご覧下さい)。

スキーマファイル

望む数だけschema.xmlファイルを使うことが出来ます。おそらくパッケージごとに一つのスキーマが欲しいでしょう。スキーマファイルは(*.)schema.xmlと名付けなければなりません、すなわち、schema.xml、package1.schema.xml、 core.package1.schema.xmlといった名前はすべて受け入れられます。これらのファイルはプロジェクトディレクトリに設置しなければなりません

パッケージ化されたbookstoreの例では、次のスキーマが見つかります:

  • author.schema.xml
  • book.schema.xml
  • club.schema.xml
  • media.schema.xml
  • publisher.schema.xml
  • review.schema.xml
  • log.schema.xml

それぞれのスキーマファイルはpackage属性をこのスキーマファイル/データベースに所属するすべてのテーブルにpackage名に設定するデータベースタグを含まなければなりません。

例えば、パッケージ化されたbookstoreの例において、author.schema.xmlは次のデータベースタグを含みます:

<database package="core.author" name="bookstore" [...]>

このことはAuthor OMクラスはビルド出力ディレクトリのcore/author/サブディレクトリに作成されることを意味します。

一つのパッケージに所属するスキーマファイルを複数持つことが出来ます。例えば、パッケージ化されたbookstoreの例ではbook.schema.xmlとmedia.schema.xmlの両方が同じ"core.book"パッケージに所属します。

packageObjectModelビルドプロパティ

我々はパッケージ化のビルドプロセスを有効にするpropel.packageObjectModelビルドプロパティを考案しました。

これをオンに切り替えるために、次の行をプロジェクトディレクトリにあるbuild.propertiesファイルに追加します:

propel.packageObjectModel = true

OMビルド

パッケージ化されたbookstoreのビルドを実行するためにPropel/generator/ディレクトリに移動して次のコマンドを入力します:

phing -Dproject=bookstore-packaged

エラー無しでこれが実行されたら、projects/bookstore-packaged/build/classesディレクトリを見てみると次のディレクトリツリーが作成されています:

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

(明瞭にするために追加のmap/とom/サブディレクトリのそれぞれのディレクトリに出力されます。)

さらにpropel.output.dir ビルドプロパティを変更することでPropelが作成したファイルを設置する場所を微調整することが出来ます。デフォルトではプロパティは次のように設定されます:

propel.output.dir = ${propel.home}/projects/${propel.project}/build

ビルドディレクトリとして他のディレクトリを使用するように変更することが出来ます。

SQLビルド

パッケージ化されたbookstoreビルドの実行を成功してbuild/sql/ディレクトリを見てみると、それぞれのパッケージ(スキーマファイルデータベースタグでpackage属性として指定されます)ごとに一つのsqlファイルが生成されていることを見ることになります:

  • addon.club.schema.sql
  • core.author.schema.sql
  • core.book.schema.sql
  • core.publisher.schema.sql
  • core.review.schema.sql
  • util.log.schema.sql

これらのファイルはそれぞれのパッケージに必要なCREATE TABLE SQL命令文を含みます。

次のコマンドを入力することでinsert-sqlタスクを実行します:

phing -Dproject=bookstore-packaged insert-sql

これらのSQL命令文はPropel/generator/test/ディレクトリに設置されたSQLiteデータベース上で実行されます。

テストファイルを実行する

生成されたOMクラスをテストするために、それらをテストしたいと思います。

cd test
php bookstore-packaged-test.php

OMクラスのもっとも重要な機能のためにこれはテストのシリーズを実行しエラー無しで動作します。

フィードバック

何かが見つからないもしくはエラーや予期しない挙動がありましたら、私達に連絡して下さるようお願いします:

Support