- 一般的なもの
- 各データベースに固有の問題
- どのMySQLのバージョンで動作可能ですか?
- MySQLではInnoDBを使う必要がありますか?
- InnoDBとMyISAMを同じデータベース内で使うことはできますか?
- PostgreSQLでBLOB/CLOBクエリをトランスアクション内に置く必要がありますか?
- Propelは持続的接続(persistent connections)をサポートしていますか?
- Propelは多重化されたデータベースを扱うことができますか?
- Propelが既に存在するデータベースからschema.xmlを生成することは可能ですか?
- テーブルに対し文字エンコーディーングや照合順序(collate)を設定することはできますか?
- generatorを使う際
Frequently Asked Questions
ここはまだ執筆途中です。他のPropelユーザーにも役に立つ質問があると思う方はコメント欄に質問を追加してFAQページ内で答えます。質問のタイプが「どうしてこれ動かないの?」の様なものの場合は何で動かないんだ!?ぺージ内に答えがあるかもしれません。
ここの中で見つからない質問はuser mailing-list内で英語で聞かれることをお勧めします。
一般的なもの
どうしてbuild.propertiesとruntime-conf.xmlは別々になっているの?
build.propertiesはgeneratorの属性を定義するところである一方、runtime-conf.xmlファイルはruntime環境に関する属性を定義するところです。ほとんどの場合この2つのファイルには同じ情報が入ってしまいます。(そうある必要はないのですが)特にデータベース接続に関することは同じものが入るでしょう。runtime属性ファイルはPhingタスクによってPHPの多次元の連想配列に変換されます。このPhingタスクはまたPropelの自動ロードの仕組みによりクラスマッピングの情報も追加します。Propelを初期化するとそれらのクラスファイルのパス情報が変換されたファイルが(デフォルトではbuild/confディレクトリに)保存されます。
Propelはどのように(auto-incrementといった)idを生成するのですか?
Propelはネイティブでidの生成だけをサポートします。これはMySQLにはAUTO_INCREMENTやMS SQL ServerではIDENTITY()またPostgreSQLではCREATE SEQUENCEをつかうことを意味します。
どうしてPropelはCreoleを(既存のデータベースからPropelクラスを作成する)リバースエンジニアリングに使っているのですか?
Creoleの優れたメタデータのサポートをしているためPropelはいまのところCreoleをリバースエンジニアリング用に使っています。このCreoleへの依存は回春中の新しいツールで置き換わる予定ですLinguaFranca。しかしこのプロジェクトはまだはじまったばかりです。
PropelはViewをサポートしていますか?
PropelはViewを普通のテーブルの用に扱うので、使用可能です。しかしViewに更新をすることができる必要があり、読み取り専用でないことが必要です。使用しているデータベースのドキュメントを参照してください。
各データベースに固有の問題
どのMySQLのバージョンで動作可能ですか?
PropelはMySQL 4.0.xを前提に作られています。またもっと新しい4.1.x and 5.xでも動作可能ですが、これらのバージョンで追加されたり修正された機能を生かしてはいません(5.xからのViewは動作するはずですが)。もっと昔のバージョン3.x以下の場合そのままでは動作市内でしょう。
MySQLではInnoDBを使う必要がありますか?
使う必要はありません。以前のPropelリリースではInnoDBが完全な外部キーとトランスアクションをサポートしているためInnoDBがデフォルトで設定されていました。トランスアクションと外部キーの制約のサポートはPropelの利点ですが、MySQLネイティブで(そして更に高速な)MyISAMテーブルタイプを使うことも可能です。アプリケーションがPropelをデータを読むことを中心に使う場合はMyISAMテーブルを使うことが得策でしょう。テーブルタイプを変更するにはbuild.properties内のpropel.mysql.tableTypeの値を変更してください。
InnoDBとMyISAMを同じデータベース内で使うことはできますか?
現在はできません。MySQLがこれに対してどのような制約をもたらすのかは分かりませんが、Propelはテーブルタイプをbuild属性で一括して設定するようになっているのでできません。
PostgreSQLでBLOB/CLOBクエリをトランスアクション内に置く必要がありますか?
いいえ、PropelはPostgreSQLを使ってLOBの入ったクエリを実行する際は自動的にトランスアクションをはじめてコミットしているのでその必要はありません。
Propelは持続的接続(persistent connections)をサポートしていますか?
はい、PDOがサポートしているものに関しては全てサポートしています。runtime-conf.xml内にPDOに関する設定を追加することは可能ですが、最初にPDOがあなたの必要な機能をサポートしているかをチェックするすることをお勧めします。これまでのPDOは必ずしも一貫性をもって動作してくれないことが報告されていて、一貫性が統合されたAPI層のそもそもの目的ですよね :-)
Propelは多重化されたデータベースを扱うことができますか?
はい、すこし手を加えることにより可能になります。[ハウツーセクション wiki:Ja/Users/Documentation/1.3/HowTos]を参照してください。
Propelが既に存在するデータベースからschema.xmlを生成することは可能ですか?
はい、既に存在するデータベースを参照してください。
テーブルに対し文字エンコーディーングや照合順序(collate)を設定することはできますか?
はい、Ja/Users/Documentation/1.3/RuntimeConf? を参照してください。
generatorを使う際
Propelが生成するPHPの関数やPeerの定数の名前を変えることはできますか?
はい、Ja/Users/Documentation/1.3/Schema?内のphpNamingMethod(とdefaultPhpNamingMethod)属性を参照してください。
