17

PHP用のRubyのActiveレコードを探しています。フィールドを定義し、基本ORMクラスを拡張するだけで、ACID操作を無料で取得できるほど単純なものです。コードを記述せずにデフォルトのゲッターとセッターを取得する必要がありますが、デフォルトのゲッターまたはセッターをオーバーライドするのは、get$fieldNameまたはset$fieldName関数を必要な動作で宣言するのと同じくらい簡単です。Symphonyを使用すると、オブジェクトごとに約5つのファイルを作成でき、定義されたすべてのオブジェクトは、私が知る限り常にロードされます。より良い代替案は何ですか?なぜそれが良いのですか?答えに簡単な例を入れていただけますか?

Doctrineは、シンフォニー以外に私が見たもう1つのORMです。また、データ構造を記述するyamlファイルを作成する必要があります。データベースはすでにこのようなものを定義しています。設定ファイルをどこにでも生成して保存しなくても、テーブル定義を読み取るだけで何ができますか?

4

13 に答える 13

11

私はSymfony のデフォルト ORM として Propel を置き換えるフル機能の ORM であるDoctrineの大ファンです。

これには、期待される基本的な ORM 機能と、私が素晴らしいと思ったフル機能のクエリ ビルダーが含まれています。

データベースを管理するためのコマンド ライン ツールの完全なスイートが付属しています。たとえば、YAML でスキーマとフィクスチャを作成し、Doctrine にスキーマに基づいてクラスを生成させ、データベースを作成し、モデルに基づいてスキーマを作成し、単一の./doctrine build-all-reload.

また、データベース移行のサポートも含まれており、最近移行を更新して、移行モデルを自動的に比較および生成します。

ドクトリンの苦情に従って、コマンドを実行する./doctrine generate-models-db./doctrine generate-yaml-db、現在のデータベース設定からモデルと yaml ファイルをそれぞれ自動的に作成できます。

その他の優れた機能には、「Behaviors」が含まれます。これにより、スキーマに特定の動作を実装する際の作業がはるかに簡単になります。たとえば、「Timestampable」動作をクラス ファイルに追加できます。Doctine は自動的に 'created_at' および 'updated_at' 列を追加して入力し、$object->save()実行するたびに 'updated_at' 列を自動的に更新します。より複雑な動作には、i18n、テーブルのバージョン管理、およびツリーが含まれます (ただし、実際には NestedSet のみ)。

個人的に私は Doctrine に非常に夢中になっており、チャンスがあるたびに絶賛しています。

于 2008-10-21T22:48:04.347 に答える
9

redbean というあまり知られていない orm レイヤーを使用します。http://www.redbeanphp.comで見つけることができます。構成ファイルをまったく使用せずに、テーブルの列とインデックスをすべて単独で作成するという意味で、非常にユニークです。時間の大幅な節約になると思います。

于 2009-09-18T09:30:27.140 に答える
6

CodeIgniter ( http://codeigniter.com/user_guide/database/active_record.html ) とその PHP5 専用フォーク Kohana ( http://docs.kohanaphp.com/libraries/orm ) の両方に ActiveRecord パターンの実装が含まれています。

于 2008-10-20T23:33:52.010 に答える
5

肥大化することなく、自分で作成しました。(オンサイトのソースを更新する必要がありますが)

私はあなたが言及したポイントを正確に念頭に置いて作成しました:何十ものxmlファイル、巨大なフレームワーク、データベースからプロパティへのマッピングを備えた単純なコンストラクターだけで、基本的なCRUD /検索/結合を行います。私が行っていることのほとんどでは、カスタム クエリを記述する必要さえありません。

これについては、私のサイトでも以前に書いたことがあります。基本的な例を確認して、理解を深めてください。

私がリリースする次のバージョンには、(データベースの「パス」をたどるための) 1 行の結合の結合、ini ベースのデータベース設定、クロス データベースのサポート、非常に単純なデータベースの抽象化、標準ロガーが付属しています。データベースがダウンしている場合は、SQLite に戻ります。

更新に興味がある場合は、大声でお知らせください。

そうそう、忘れないでください。 Pork.Generatorという優れた視覚的足場ジェネレーターもあります。データベース構造を分析し、1:1 1:many および many:many の関係を見つけようとし、自動的にクラスを生成できます :-) (ソース: schizofreend.nl )データベースで見つかった関係

于 2008-10-20T23:35:37.840 に答える
4

Zend_Db_TableZend_Db_Table_Rowは、あなたが説明していることにかなり適しています。構成ファイルは必要ありません。ほとんどのメタデータはデータベース自体から「検出」されます。

技術的には、これらのクラスは ActiveRecord パターンを実装していません。代わりに、Table Data GatewayおよびRow Data Gatewayパターンを実装します。これらを合わせて ActiveRecord と同様の価値を提供し、いくつかの点で ActiveRecord よりも柔軟性があります。

しかし、他の ORM と同様に、必然的に、OO インターフェイスでは実行できない SQL クエリと操作がいくつかあります。ワンストップ ショッピングの役割を果たす ORM はありません。

脚注: 私は Zend Framework プロジェクト、特に Zend_Db コンポーネントに 1 年余り取り組みました。しかし、私はもう彼らのために働いていません。

于 2008-10-20T23:21:21.193 に答える
1

保守可能なフレームワークを確認してください。ActiveRecord(ランタイムリフレクション)よりもコード生成の方が好きですが、特にORM機能の観点からはMaintainableフレームワークが使いやすいことがわかりました。

http://framework.maintainable.com/mvc/3_model.php#c3.7

コード生成に基づくフレームワークが必要な場合は、QCodoを試してください。dcousineauがDoctrineについて何を言ったとしても、私はQcodoについて言うことができます。これは、.NET/Delphiを模倣したイベント駆動型の本格的なフレームワークです。ただし、コード生成機能を使用して、生成されたクラスをフレームワークの残りの部分から分離する方法を見つけることができます。したがって、生成されたクラスを他のフレームワーク内に埋め込むことができます。

于 2008-11-25T00:16:25.387 に答える
1

Ruby DataMapper の実装に従う別のオプションはphpDataMapperです。明らかに、ActiveRecord ではなく Data Mapper です :)。

于 2009-08-20T21:31:39.670 に答える
1

Doctrine with Symfony をお勧めします。学ぶべきことはまだありますが、プロジェクトが成長したときに必要になる機能 (CRUD、フォーム フレームワーク、レコード テンプレート、DQL、プラグイン サポート、動作) が含まれていることがわかります。どちらのプロジェクトにも非常に活発なコミュニティがあり、あなたの質問のほとんどは公式のチュートリアルまたはフォーラムで既に回答されているため、行き詰まりに陥ることはありません。

YAML でのデータベース定義が気に入らない場合は、いつでもORM Designerまたは MySQL Workbench を使用できます。

于 2010-01-15T10:45:42.370 に答える
0

強力なデータベース抽象化レイヤー (DBAL) の上にある、PHP 用のオブジェクト リレーショナル マッパー (ORM)。その重要な機能の 1 つは、Hibernates HQL に触発された Doctrine Query Language (DQL) と呼ばれる独自のオブジェクト指向 SQL ダイアレクトでデータベース クエリを作成するオプションです。これにより、不要なコードの複製を必要とせずに柔軟性を維持する、SQL の強力な代替手段が開発者に提供されます。

于 2016-10-04T05:34:10.380 に答える
0

Idiorm と Parisが好きで、どちらも小さなプロジェクトで使用しています。Idiorm は実際の ORM ですが、Paris はアクティブなレコードの実装です。お好きな方をお使いいただけます。

Idiorm と Paris の上に構築されたGranadaというフォークもあり、eager loading などのサポートが追加されています。

于 2015-09-07T21:34:54.950 に答える
0

QCubedをお勧めします。これは、コード生成、UI スキャフォールディング、および迅速なアプリケーション開発に重点を置いた、非常に強力な PHP5 専用の ORM フレームワークです。トレーニング ビデオをご覧ください: http://qcu.be/content/video-screencasts

于 2011-02-02T05:10:26.080 に答える
0

http://dbphp.net

長所

  • その場でデータベース/テーブル/フィールド/さまざまなテーブル/フィールド属性を生成/変更します。
  • インストール不要。
  • 構成がまったくありません。
  • ライブラリをインクルードし、db リンク パラメータを指定するだけで作業を開始できます。
  • ローカリゼーションのサポートが組み込まれています。
  • さまざまなキャッシュ レベルがあり、キャッシュ エンジンを拡張できます。
  • 多くのさまざまなデータベース接続と同時に動作します。
  • 他のデータベース サーバーにあるテーブル間の関係を作成できます。
  • クラスと変数のドキュメント コメントを使用して、テーブル/フィールドの属性を抽出します。

短所

  • オブジェクトでのみ機能します。つまり、クラスを定義し、負荷などを保存するクラスのインスタンスが必要です。
  • サイトはありませんが、examples フォルダーがあります。
于 2013-10-19T21:02:45.120 に答える