既存の PHP アプリケーションの拡張に取り組んでいます。私にとって残念なことに、既存のアプリはめちゃくちゃです。これはすべて生の mysql_* 呼び出しを含むスパゲッティ コードです。うめき声。私が拡張している部分でそれを行うつもりはありません。
そこで、気軽に立ち寄って使い始められるDBALのシンプルなORMを探しています。望ましい機能:
- 既存のデータベース スキーマで機能する必要があります。最小限の追加構成を使用するか、追加構成を使用しないことが望ましいです。既存のデータベース スキーマは、既存の PHP コードと同じ品質です (適切な命名規則がない、正規化されていないなど)。Doctrine 2 のように、データベース スキーマを手動で注釈付きオブジェクト プロパティに変換するのに何日も費やしたくありません。
- 既存の生の mysql_* クエリと一緒に動作できる必要があります。Doctrine 2 や Propel のような水和 ORM が、スクリプトが背後でデータベース内のデータを手動で操作しているときにどのように動作するかはわかりませんが、きれいではないと思います。
- PHP 5.2.x で実行する必要があります。私は PHP 5.3 を使いたいと思っていますが、既存の 125,000 行のスパゲッティ コードの混乱を調べて、PHP 5.3 で動作することを確認することにまったく関心がありません。
- 関係は必要ありません。リレーショナル データにアクセスする必要があるいくつかの場所では、喜んでエクストラなどを呼び出し
find()
ますquery()
。 beforeSave
何らかのトリガー サポート ( 、 など)があればボーナス ポイントafterSave
。必須ではありませんが、あると便利です。
編集:誰かが私を悲惨な状態から解放してくれました。125,000 行のスパゲッティ コードがデータベース スキーマも変更することがわかりました。たとえば、どこかに追加のオプションを追加すると、大量の ALTER TABLE ステートメントが飛んでいきます。おそらく、このコードベースで 1 年分の TheDailyWTF を埋めることができるでしょう。したがって、もう 1 つの要件:
- データベース スキーマの変更に自動的に対応できる必要があります (列の追加など)。
いくつかのソリューションを検討してきましたが、要件を考慮してどれだけうまく機能するかはわかりません。Doctrine 2、RedBeanPhp などはすべて PHP 5.3 を必要とするため、アウトです。PHP 5.2.x 用の RedBeanPhp のレガシー バージョンがありますが、それが乱雑な既存のデータベース スキーマで機能するかどうかはわかりません。NotORM はデータを取得するのに問題ないように見えますが、既存のデータベース スキーマ用に構成できるかどうか、およびデータをデータベースに簡単に戻す方法がわかりません。
理想的には、シンプルなものが欲しいです。例えば:
$user = User::find($id);
$user->name = 'John Woo';
$user->save();
または:
$articles = ORM::find('article')->where('date' => '2010-01-01');
foreach ($articles as $article) {
echo $article->name;
}
ヒントや代替ソリューションも大歓迎です!