名前の生成

PropelジェネレータはDDLとPHPコードを作成するので、名前を変換し、場合によってユニークな名前を作成する必要があります。PropelがPHPの名前と制約名を生成するのか -- そして両方の生成をどのようにカスタマイズすることが出来るのかを見てみましょう。

PHPの名前の生成

多くのユーザにとって、Propelの名前生成のもっとも重要な面はschema.xmlでPHP定数とメソッドに使用される名前を指定する識別子の名前の変換にあります。

デフォルトの振る舞い

Propelはクラス定数とインスタンス変数を変形しません:

  • Propelが生成する定数名は常にschema.xml弟子呈された識別子名(テーブル/カラム)のすべて大文字のバージョンです。後で学ぶように、これらの定数のために明確な値を指定することが出来ます。
  • 保護されたインスタンス変数はschema.xmlで指定された識別子名(テーブル/カラム)の正確なコピーです。

デフォルトでは、Propelはキャメルケースメソッド名を生成しこれらの名前翻訳の"アンダースコアメソッド"を使用します。このことは最初の文字が大文字化され、アンダースコアの後のすべての文字はそのままです。おそらくベストな説明例です:

schema.xmlにおける識別子の名前対応するクラス/メソッド名使い方の例
my_tableMyTablenew MyTable()
another_column_nameAnotherColumnName$obj->getAnotherColumnName()

=== ネーミングをカスタマイズする===

デフォルトのネーミングが適切ではない状況がよくあります。複数の例です: * データベースの名前のために複数形の名前を使うが、Propelで"複数形の"ような単独のオブジェクトを使いたくない場合(例えば、$joe = new Users())。 * 大文字小文字が混在する名前をデータベースで使いたいが、生成されたモデルコードではより伝統的な名前(例えば、キャメルケース)がより好ましい場合。 * クラスに接頭辞を付けたい場合。 * ... あなたがこのリストに追加できることはたくさんあると思います。

Propelがクラスとメソッドのために使用する名前をカスタマイズするための戦略は2つあります。 1. カスタム名を指定する 1. 使用されているネームジェネレータを変更する

カスタムのPHPの名前を指定する

もっとも共通のアプローチはテーブルもしくはカラムのためにシンプルにカスタムのPHP名を指定することです。これはphpName属性を使用することで一般的には達成できます。

テーブルのために生成されたクラスの名前を変更する例です:

<table name="account_balances" phpName="AccountBalance">
  <!-- -->
</table>

カラムのために、メソッド(ゲッタ、セッタ、joinメソッドなど)で使用される名前および、 生成された定数(peerName属性経由)のための名前にもカスタマイズすることが出来ます。例えば、PHPの予約語をカラム名として使用する場合("class"がよい例)などで定数名を変更する必要があるかもしれません。

<table name="enrollment" phpName="EnrollmentRecord">
  <column name="studentname" phpName="StudentName" type="varchar"/>
  <column name="class" peerName="CLAZZ" type="varchar"/>
</table>

ネームジェネレータを変更する

使用されるネームジェネレータを変更することも出来ます。Propelは3つのネームジェネレータをサポートします: 1. underscore (デフォルト) 1. phpname - "underscore"と似ていますが、小文字に変換されません。 1. nochange - 名前が変更されない。

データベースレベル(すべてのテーブルに関して)もしくは特定のテーブルのためにネームジェネレーションをカスタマイズすることが出来ます。

例です (データベースレベル):

<database name="bookstore" defaultPhpNamingMethod="nochange">
  <!-- -->
</database>

or (table-level):

<table name="book" phpNamingMethod="nochange">
  <!-- -->
</table>

名前生成の制約

Propelは他のデータベース識別子のために名前を生成します -- 外部キー制約、インデックス、ユニークインデックスなどです。Propelはユニークな名前(少なくともschema.xmlの文脈でユニークです)を生成し最長の名前の長さやあなたがビルドしているデータベースなどの要素を考慮します。

これはPHPネームジェネレーションほどカスタマイズできませんが、Propelが生成するであろうもののために一般的に独自の名前を指定することが出来ます。

例えば、外部キーのために独自の名前を指定することを選択するもしくは名前の生成をPropelに任せることが出来ます。

!#xml
<foreign-key name="my_fk" ....>