PHP 用の優れたオブジェクト リレーショナル マッピング ライブラリはありますか?
私はPDO /ADO について知っていますが、ドメイン モデルとリレーショナル モデルの間の実際のマッピングではなく、データベース ベンダー間の相違点の抽象化のみを提供しているようです。Hibernateが Java に対して、NHibernate が .NET に対して行うのと同じように機能する PHP ライブラリを探しています。
Doctrineを調べてください。
Doctrine 1.2は Active Record を実装しています。Doctrine 2+は DataMapper ORM です。
また、 Xysterもチェックしてください。これは、Data Mapper パターンに基づいています。
また、DataMapper vs. Active Recordもご覧ください。
良いものはDoctrineとPropelの 2 つだけです。私たちは Doctrine を支持しており、 Symfonyとうまく連携します。ただし、主要なもの以外のデータベースのサポートを探している場合は、独自のコードを作成する必要があります。
Axon ORM はFat-Free Frameworkの一部であり、オンザフライ マッパーを備えています。コードジェネレーターはありません。愚かな XML/ YAML構成ファイルはありません。データベース スキーマをバックエンドから直接読み取るため、ほとんどのCRUD操作では基本モデルを拡張する必要さえありません。PDOをサポートするすべての主要なデータベース エンジン ( MySQL、SQLite、SQL 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 です。
私は自分でPork.dbObjectを開発してきました。(単純なPHPORMとActiveRecordの実装)主な理由は、ほとんどのORMが重すぎると感じることです。
Pork.dbObejctの主な考え方は、軽量でセットアップが簡単であることです。XMLファイルの束はなく、コンストラクターで1つの関数呼び出しを呼び出してバインドし、addRelationまたはaddCustomRelationを使用して別のdbObjectとの関係を定義します。
見てみましょう:Pork.dbObject
Doctrine2を試してください。これはおそらく、PHP 用の最も強力な ORM ツールです。これは Doctrine 1 とは別に言及しています。これはまったく別のソフトウェアだからです。ゼロから書き直され、まだベータ段階ですが、現在は使用可能で開発されています。
これは非常に複雑な ORM ですが、うまく設計されています。オリジナルのDoctrine 1から多くの魔法が消えました. 完全なソリューションを提供し、Doctrine2 の上に独自の ORM を記述したり、そのレイヤーの 1 つだけを使用したりできます。
Outlet ORMをチェックしてください。Propel や Doctrine よりもシンプルで、Hibernate と同様に動作しますが、PHP の雰囲気が強いだけです。
PHP ライブラリFlourishで ORM 関連のクラスを見つけました。
IdiormとParisをチェックする必要があります。
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);
FlourishライブラリのORMを試しました。
私は現在、Ruby の Datamapper プロジェクトのような単純な構文を持つように設計された ORM であるphpDataMapperに取り組んでいます。これもまだ開発の初期段階ですが、うまく機能します。
私はIdiorm と Parisで素晴らしい経験をしました。Idiorm は小さくてシンプルな ORM ライブラリです。Paris は、Idiorm 上に構築された同様に単純な Active Record 実装です。PDO を使用する PHP 5.2+ 用です。既存のアプリケーションにドロップするだけのシンプルなものが必要な場合に最適です。
Until PHP 5.3 release don't expect to have a good ORM. It's a OO limitation of PHP.
友人の Kien と私は、彼が PHP 5.3 より前に作成した以前のバージョンの ORM を改善しました。基本的に、Ruby on Rails のActive Recordを PHP に移植しました。トランザクション、複合主キーのサポート、さらにいくつかのアダプターなど、必要ないくつかの重要な機能がまだ不足しています (現在、MySQL と SQLite 3 のみが機能します)。しかし、私たちはこの作品を完成させることに非常に近づいています。PHP 5.3 で PHP ActiveRecord を見ることができます。
ブラジル ORM: http://www.hufersil.com.br/lumine . PHP 5.2+ で動作します。私の意見では、わかりやすいドキュメントとダウンロード用の多くの例があるため、ポルトガル人とブラジル人にとって最良の選択です。
KohanaのLEAP ORM をご覧ください。DB2、Drizzle、Firebird、MariaDB、SQL Server、MySQL、Oracle、PostgreSQL、およびSQLiteを含む一連のデータベースで動作します。シンプルなオートロード機能により、ほぼすべての PHP フレームワークで動作します。ソース コードはGitHubのhttps://github.com/spadefoot/kohana-orm-leapにあります。LEAP のチュートリアルをオンラインでチェックアウトできます。
ORM ライブラリは、整数以外の主キーと複合キーで動作します。接続はデータベース接続プールを介して管理され、生の SQL クエリで動作します。ORM には、SQL ステートメントの作成を非常に簡単にするクエリ ビルダーもあります。
PHP ADOdb を試してください。
他は使っていないのでベストとは言えません。しかし高速で、Memcachedとキャッシングをサポートしています。
そして、Zend Framework のDB/Select よりもはるかに高速です。
特に Active Record ではなく Data Mapper パラダイムを実装する ORM を探している場合は、GacelaPHPを検討することを強くお勧めします。
ガセラの特徴:
他の ORM ソリューションは、リモートで複雑なものを開発するときに、あまりにも肥大化したり、面倒な制限があったりします。Gacela は、データベースおよび Memcached とのすべてのやり取りにPDOを使用することで肥大化を最小限に抑えながら、データ マッパー パターンを実装することでアクティブ レコード アプローチの制限を解決します。
MicroMVC には、8 KB のデータベース クラスのみに依存する 13 KB のORMがあります。また、すべての結果を ORM オブジェクト自体として返し、遅延静的バインディングを使用して、現在のオブジェクトのテーブルとメタ データに関する情報が各オブジェクトに埋め込まれないようにします。これにより、最も安価な ORM オーバーヘッドが発生します。
MySQL、PostgreSQL、およびSQLiteで動作します。
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が表示されます。
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";
}
教義はおそらくあなたの最善の策です。Doctrine以前は、DB_DataObjectは基本的にオープンソースであった唯一の他のユーティリティでした。
QCubed フレームワークには素晴らしい ORM が含まれています。コード生成と足場に基づいています。リフレクションに基づいていて一般的に遅い ActiveRecord とは異なり、コード生成では、データベースに基づいてスケルトン クラスが作成され、後でそれらをカスタマイズできます。それは魅力のように機能します。
http://code.google.com/p/lworm/を見てください。これは、非常にシンプルですが、パワフルで軽量な PHP 用の ORM システムです。必要に応じて、簡単に拡張することもできます。
本当に優れた単純な ORM はMyActiveRecordです。MyActiveRecord のドキュメント。私はそれをたくさん使ってきましたが、とてもシンプルでよくテストされていると言えます。
Sadoはシンプルな PHP ORM パッケージで、使いやすく、ビデオ チュートリアルを提供しています。
PdoMapを試してください。ウィキペディアは、Hibernate に触発されたと主張しています。私は Hibernate を使用したことがないので、判断できません :) が、私の経験から言うと、Hibernate は実装が簡単で、他の ORM よりも学習曲線が緩やかで、優れた高速な ORM です。
PHP ORM Faces for PDO 拡張機能。PHP Faces フレームワークを参照してください。
$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
シリウス ORMを見た。これは新しい ORM であり、プロジェクトは開発段階にありましたが、次の口では 1.0 バージョンでリリースされます。
私たちが使用するもう 1 つの優れたオープン ソース PHP ORM はPHPSmartDbです。安定しており、コードをより安全でクリーンにします。その中のデータベース機能は、私がこれまで PHP 5.3 で使用した中で最も簡単です。
私はminiOrmに取り組んでいます。オブジェクト モデルと MySQL 抽象化レイヤーをできるだけ簡単に使用するためのミニ ORM です。それがあなたに役立つことを願っています: http://jelnivo.fr/miniOrm/