267

PHP 用の優れたオブジェクト リレーショナル マッピング ライブラリはありますか?

私はPDO /ADO について知っていますが、ドメイン モデルとリレーショナル モデルの間の実際のマッピングではなく、データベース ベンダー間の相違点の抽象化のみを提供しているようです。Hibernateが Java に対して、NHibernate が .NET に対して行うのと同じように機能する PHP ライブラリを探しています。

4

36 に答える 36

120

Doctrineを調べてください。

Doctrine 1.2は Active Record を実装しています。Doctrine 2+は DataMapper ORM です。

また、 Xysterもチェックしてください。これは、Data Mapper パターンに基づいています。

また、DataMapper vs. Active Recordもご覧ください。

于 2008-09-20T16:47:58.790 に答える
105

RedBeanを試してください。必要なものは次のとおりです。

  • 構成なし
  • データベースなし (その場ですべてを作成します)
  • モデルなし

さらに、すべてのロックとトランザクションを実行し、バックグラウンドでパフォーマンスを監視します。(なんてこった! ガベージ コレクションも行う....) 何よりも... 1 行も... コードを書く必要がない...ああ、このORM レイヤーは私を救ってくれた!

于 2009-05-14T12:36:13.857 に答える
47

良いものはDoctrinePropelの 2 つだけです。私たちは Doctrine を支持しており、 Symfonyとうまく連携します。ただし、主要なもの以外のデータベースのサポートを探している場合は、独自のコードを作成する必要があります。

于 2008-09-20T16:56:40.347 に答える
34

Axon ORM はFat-Free Frameworkの一部であり、オンザフライ マッパーを備えています。コードジェネレーターはありません。愚かな XML/ YAML構成ファイルはありません。データベース スキーマをバックエンドから直接読み取るため、ほとんどのCRUD操作では基本モデルを拡張する必要さえありません。PDOをサポートするすべての主要なデータベース エンジン ( MySQLSQLiteSQL Server /Sybase、Oracle、PostgreSQLなど) で動作します。

/* SQL */
CREATE TABLE products (
    product_id INTEGER,
    description VARCHAR(128),
    PRIMARY KEY (product_id)
);

/* PHP */
// Create
$product=new Axon('products'); // Automatically reads the above schema
$product->product_id=123;
$product->description='Sofa bed';
$product->save(); // ORM knows it's a new record

// Retrieve
$product->load('product_id=123');
echo $product->description;

// Update
$product->description='A better sofa bed';
$product->save(); // ORM knows it's an existing record

// Delete
$product->erase();

何よりも、プラグインとそれに付随する SQL データ アクセス レイヤーは、フレームワークと同じくらい軽量です: 14 KB (Axon) + 6 KB (SQLdb)。Fat-Free はわずか 55 KB です。

于 2010-08-01T17:05:45.743 に答える
28

私は自分でPork.dbObjectを開発してきました。(単純なPHPORMとActiveRecordの実装)主な理由は、ほとんどのORMが重すぎると感じることです。

Pork.dbObejctの主な考え方は、軽量でセットアップが簡単であることです。XMLファイルの束はなく、コンストラクターで1つの関数呼び出しを呼び出してバインドし、addRelationまたはaddCustomRelationを使用して別のdbObjectとの関係を定義します。

見てみましょう:Pork.dbObject

于 2008-09-21T00:40:41.683 に答える
22

Doctrine2を試してください。これはおそらく、PHP 用の最も強力な ORM ツールです。これは Doctrine 1 とは別に言及しています。これはまったく別のソフトウェアだからです。ゼロから書き直され、まだベータ段階ですが、現在は使用可能で開発されています。

これは非常に複雑な ORM ですが、うまく設計されています。オリジナルのDoctrine 1から多くの魔法が消えました. 完全なソリューションを提供し、Doctrine2 の上に独自の ORM を記述したり、そのレイヤーの 1 つだけを使用したりできます。

于 2010-07-23T22:07:00.500 に答える
13

私はKohanaから始めたばかりですが、 Propelのように複数の構成ファイルの複雑さをすべて呼び出すことなく、Ruby on Rails に最も近いようです。

于 2008-10-21T23:02:34.957 に答える
12

私はPropelが本当に好きです。ここで概要を知ることができ、ドキュメントはかなり良いです、そしてあなたはそれをPEARまたはSVNを通して得ることができます。

動作するPHP5のインストールと、クラスの生成を開始するためのPhingのみが必要です。

于 2008-09-20T18:36:33.820 に答える
12

Outlet ORMをチェックしてください。Propel や Doctrine よりもシンプルで、Hibernate と同様に動作しますが、PHP の雰囲気が強いだけです。

于 2008-09-22T20:22:36.277 に答える
8

PHP ライブラリFlourishで ORM 関連のクラスを見つけました。

于 2010-08-03T15:33:04.347 に答える
7

IdiormとParisをチェックする必要があります。

于 2011-10-21T01:04:06.077 に答える
6

PHP5のオブジェクトリレーショナルマッパーであるdORMを試してみてください。あらゆる種類の関係(1対1)、(1対多)、(多対多)、およびデータ型をサポートします。それは完全に邪魔になりません:コード生成やクラス拡張は必要ありません。私の意見では、DoctrineとPropelを含め、他のどのORMよりも優れています。ただし、まだベータ版であり、今後数か月で大幅に変更される可能性があります。http://www.getdorm.com

また、学習曲線も非常に小さくなっています。使用する3つの主な方法は次のとおりです。

<?php 
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);
于 2009-04-28T01:28:12.657 に答える
4

FlourishライブラリのORMを試しました。

于 2010-08-23T21:09:58.600 に答える
4

私は現在、Ruby の Datamapper プロジェクトのような単純な構文を持つように設計された ORM であるphpDataMapperに取り組んでいます。これもまだ開発の初期段階ですが、うまく機能します。

于 2009-01-13T19:52:36.217 に答える
4

私はIdiorm と Parisで素晴らしい経験をしました。Idiorm は小さくてシンプルな ORM ライブラリです。Paris は、Idiorm 上に構築された同様に単純な Active Record 実装です。PDO を使用する PHP 5.2+ 用です。既存のアプリケーションにドロップするだけのシンプルなものが必要な場合に最適です。

于 2011-07-10T22:03:18.307 に答える
3

Until PHP 5.3 release don't expect to have a good ORM. It's a OO limitation of PHP.

于 2009-03-01T11:37:59.773 に答える
3

友人の Kien と私は、彼が PHP 5.3 より前に作成した以前のバージョンの ORM を改善しました。基本的に、Ruby on Rails のActive Recordを PHP に移植しました。トランザクション、複合主キーのサポート、さらにいくつかのアダプターなど、必要ないくつかの重要な機能がまだ不足しています (現在、MySQL と SQLite 3 のみが機能します)。しかし、私たちはこの作品を完成させることに非常に近づいています。PHP 5.3 で PHP ActiveRecord を見ることができます。

于 2009-05-16T18:15:13.727 に答える
3

ブラジル ORM: http://www.hufersil.com.br/lumine . PHP 5.2+ で動作します。私の意見では、わかりやすいドキュメントとダウンロード用の多くの例があるため、ポルトガル人とブラジル人にとって最良の選択です。

于 2011-08-08T12:56:27.470 に答える
3

KohanaのLEAP ORM をご覧ください。DB2DrizzleFirebirdMariaDB、SQL Server、MySQL、Oracle、PostgreSQL、およびSQLiteを含む一連のデータベースで動作します。シンプルなオートロード機能により、ほぼすべての PHP フレームワークで動作します。ソース コードはGitHubhttps://github.com/spadefoot/kohana-orm-leapにあります。LEAP のチュートリアルをオンラインでチェックアウトできます。

ORM ライブラリは、整数以外の主キーと複合キーで動作します。接続はデータベース接続プールを介して管理され、生の SQL クエリで動作します。ORM には、SQL ステートメントの作成を非常に簡単にするクエリ ビルダーもあります。

于 2012-01-07T03:40:05.033 に答える
3

PHP ADOdb を試してください。

他は使っていないのでベストとは言えません。しかし高速で、Memcachedとキャッシングをサポートしています。

そして、Zend Framework のDB/Select よりもはるかに高速です。

于 2009-07-17T16:29:46.500 に答える
2

冒険心があれば、Reposeをチェックしてください。Outletと同様に、 Hibernateをモデルにしています。

開発の初期段階ですが、これまでのところ、ドメインモデルの唯一の制限は、クラスがfinalとしてマークされておらず、プロパティがprivateとしてマークされていないことです。PHP> = 5.3の領域に入ったら、プライベートプロパティのサポートも実装しようとします。

于 2009-01-05T03:44:47.397 に答える
2

特に Active Record ではなく Data Mapper パラダイムを実装する ORM を探している場合は、GacelaPHPを検討することを強くお勧めします。

ガセラの特徴:

  • データマッパー
  • 外部キー マッピング
  • 関連マッピング
  • 依存マッピング
  • 具体的なテーブルの継承
  • クエリ オブジェクト
  • メタデータ マッピング
  • レイジー&イーガーローディング
  • 完全なMemcached のサポート

他の ORM ソリューションは、リモートで複雑なものを開発するときに、あまりにも肥大化したり、面倒な制限があったりします。Gacela は、データベースおよび Memcached とのすべてのやり取りにPDOを使用することで肥大化を最小限に抑えながら、データ マッパー パターンを実装することでアクティブ レコード アプローチの制限を解決します。

于 2011-07-02T15:21:21.443 に答える
2

MicroMVC には、8 KB のデータベース クラスのみに依存する 13 KB のORMがあります。また、すべての結果を ORM オブジェクト自体として返し、遅延静的バインディングを使用して、現在のオブジェクトのテーブルとメタ データに関する情報が各オブジェクトに埋め込まれないようにします。これにより、最も安価な ORM オーバーヘッドが発生します。

MySQLPostgreSQL、およびSQLiteで動作します。

于 2012-02-23T22:32:24.433 に答える
2

Agile Toolkitには、ORM/ActiveRecord と動的 SQLの独自の実装があります。

はじめに: http://agiletoolkit.org/intro/1

構文 (アクティブ レコード):

$emp=$this->add('Model_Employee');
$emp['name']='John';
$emp['salary']=500;
$emp->save();

構文 (動的 SQL):

$result = $emp->count()->where('salary','>',400)->getOne();

ダイナミック SQL とアクティブ レコード/ORM は直接使用できますが、Agile Toolkit はそれらをさらにユーザー インターフェイスとjQuery UIと統合します。これはJSFに似ていますが、純粋な PHP で記述されています。

$this->add('CRUD')->setModel('Employee');

これにより、Employee モデルのAJAX 化されたCRUDが表示されます。

于 2011-10-24T08:26:56.300 に答える
2

NotORM

include "NotORM.php";
 $pdo = new PDO("mysql:dbname=software");
 $db = new NotORM($pdo);
 $applications = $db->application()
->select("id, title")
->where("web LIKE ?", "http://%")
->order("title")
->limit(10)
;
foreach ($applications as $id => $application) {
echo "$application[title]\n";
}
于 2012-07-20T08:31:14.503 に答える
1

教義はおそらくあなたの最善の策です。Doctrine以前は、DB_DataObjectは基本的にオープンソースであった唯一の他のユーティリティでした。

于 2008-09-20T18:13:58.180 に答える
1

QCubed フレームワークには素晴らしい ORM が含まれています。コード生成と足場に基づいています。リフレクションに基づいていて一般的に遅い ActiveRecord とは異なり、コード生成では、データベースに基づいてスケルトン クラスが作成され、後でそれらをカスタマイズできます。それは魅力のように機能します。

于 2010-03-16T05:00:37.457 に答える
1

Hibernateのような ORM を探している場合は、 PMOを確認する必要があります。

SOAアーキテクチャに簡単に統合できます(開発するのは Web サービス クラスのみです)。

于 2009-05-03T07:05:30.090 に答える
1

http://code.google.com/p/lworm/を見てください。これは、非常にシンプルですが、パワフルで軽量な PHP 用の ORM システムです。必要に応じて、簡単に拡張することもできます。

于 2010-11-19T16:07:15.967 に答える
1

本当に優れた単純な ORM はMyActiveRecordです。MyActiveRecord のドキュメント。私はそれをたくさん使ってきましたが、とてもシンプルでよくテストされていると言えます。

于 2011-01-20T09:13:15.127 に答える
1

Sadoはシンプルな PHP ORM パッケージで、使いやすく、ビデオ チュートリアルを提供しています。

于 2011-06-22T20:47:23.493 に答える
1

PdoMapを試してください。ウィキペディアは、Hibernate に触発されたと主張しています。私は Hibernate を使用したことがないので、判断できません :) が、私の経験から言うと、Hibernate は実装が簡単で、他の ORM よりも学習曲線が緩やかで、優れた高速な ORM です。

于 2011-03-02T18:48:50.127 に答える
1

PHP ORM Faces for PDO 拡張機能。PHP Faces フレームワークを参照してください。

$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
于 2009-11-05T05:31:59.430 に答える
1

シリウス ORMを見た。これは新しい ORM であり、プロジェクトは開発段階にありましたが、次の口では 1.0 バージョンでリリースされます。

于 2011-02-09T11:17:32.100 に答える
1

私たちが使用するもう 1 つの優れたオープン ソース PHP ORM はPHPSmartDbです。安定しており、コードをより安全でクリーンにします。その中のデータベース機能は、私がこれまで PHP 5.3 で使用した中で最も簡単です。

于 2011-03-15T06:57:47.513 に答える
1

私はminiOrmに取り組んでいます。オブジェクト モデルと MySQL 抽象化レイヤーをできるだけ簡単に使用するためのミニ ORM です。それがあなたに役立つことを願っています: http://jelnivo.fr/miniOrm/

于 2012-10-27T17:22:03.217 に答える