PHP用の良いオブジェクトリレーショナルマッピングライブラリはありますか?
PDO /ADOは知っていますが、ドメインモデルとリレーショナルモデルとの実際のマッピングではなく、データベースベンダー間の違いを抽象化したものにすぎないようです。私はPHPライブラリが似たように機能することを探しています Hibernate はJavaに対して、そしてNHibernateは.NETに対して行います。
Doctrine を調べてください。
Doctrine 1.2 はActive Recordを実装しています。 Doctrine 2 + はDataMapperのORMです。
また、 Xyster を調べてください。これはデータマッパーパターンに基づいています。
また、 DataMapper vs. Active Record もご覧ください。
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データアクセスレイヤは、フレームワークと同じくらい軽量です。14KB(Axon)+ 6 KB(SQLdb)です。無脂肪はわずか55 KBです。
私は自分でPork.dbObjectを開発してきました。 (単純なPHP ORMとActive Recordの実装)主な理由は、ほとんどのORMが重すぎることに気付くことです。
Pork.dbObejctの主な考え方は、軽量でセットアップが簡単であるということです。 XMLファイルの束はありません。コンストラクタ内でバインドするための1つの関数呼び出しと、別のdbObjectへの関係を定義するためのaddRelationまたはaddCustomRelationだけです。
見てみましょう: Pork.dbObject
Doctrine2 を試してください。それはおそらくPHPのための最も強力なORMツールです。私はDoctrine 1とは別に言及しています。なぜならそれは完全に異なるソフトウェアだからです。最初から書き直され、まだベータ段階ですが、現在使用可能で開発されています。
非常に複雑なORMですが、うまく設計されています。オリジナルのDoctrine 1からの魔法がたくさん消えました。それは完全な解決策を提供します、そしてあなたは Doctrine2の上にあなた自身のORMを書くことができます またはその の一つだけを使うことができますレイヤー .
チェックアウト アウトレットORM 。これはPropelやDoctrineよりも単純で、Hibernateと同じように機能しますが、PHPのような感じがするだけです。
私は本当に好きです Propel 、 ここ あなたは概要を得ることができます、 documentation はかなり良いです、そしてあなたはそれを得ることができますPEARまたはSVN。
動作するPHP 5インストールと Phing クラスの生成を開始するためだけに必要です。
PHPライブラリにORM関連のクラスが見つかりました 繁栄 。
あなたがチェックアウトする必要があります イディオムとパリ 。
dORM、PHP 5のオブジェクトリレーショナルマッパー にショットを渡します。あらゆる種類の関係(1対1)、(1対多)、(多対多)、およびデータ型をサポートしています。それはまったく目立たない:コード生成やクラス拡張は必要ない。私の意見では、それはそこにあるどのORMよりも優れており、DoctrineとPropelが含まれています。ただし、まだベータ版であり、今後数ヶ月の間に大幅に変更される可能性があります。 http://www.getdorm.com
それはまた非常に小さな学習曲線を持っています。使用する主な3つの方法は次のとおりです。
<?php
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);
私は現在 phpDataMapper に取り組んでいます。これはRubyのDatamapperプロジェクトのような単純な構文を持つように設計されたORMです。まだ初期の開発段階にありますが、うまく機能します。
繁栄ライブラリのORM を試してみました。
私の友人のKienと私は、彼がPHP 5.3より前に書いた以前のバージョンのORMを改良しました。私たちは基本的にRuby on Railsの Active Record をPHPに移植しました。トランザクション、複合主キーのサポート、その他いくつかのアダプタ(MySQLとSQLite 3のみが現在動作している)など、まだ必要としているいくつかの重要な機能が欠けています。しかし、私たちはこれを完成させることに非常に近いです。 PHP ActiveRecord with PHP 5.をご覧ください。
PHP ADOdbを試してください。
私は他の人を使ったことがないので、それが最高だとは言えません。しかしそれは高速で、 Memcached とキャッシングをサポートしています。
そしてそれはずっと速いです Zend Framework's DB/Select。
私は Idiorm and Paris で素晴らしい経験をしました。 Idiormは小さくてシンプルなORMライブラリです。 Parisは、Idiorm上に構築された同様に単純なActive Recordの実装です。 PDOでPHP 5.2以降に対応しています。既存のアプリケーションにドロップするだけの簡単なものが必要な場合に最適です。
PHP 5.3がリリースされるまでは、優れたORMを期待してはいけません。これはPHPのOO制限です。
KohanaのLEAP ORM をご覧ください。 DB2 、 Drizzle 、 Firebird 、 MariaDB 、SQL Serverなど、多数のデータベースと連携できます。 MySQL 、Oracle、 PostgreSQL 、および SQLite 。単純なオートロード機能を使えば、ほとんどすべてのPHPフレームワークで動作します。ソースコードは GitHub at https://github.com/spadefoot/kohana-orm-leap にあります。あなたはチェックアウトすることができます LEAPのチュートリアル オンライン。
ORMライブラリは、非整数の主キーと複合キーを処理します。接続はデータベース接続プールを介して管理され、生のSQLクエリで機能します。 ORMには、SQL文の作成を非常に簡単にするクエリービルダーもあります。
私はminiOrmに取り組んでいます。 Object ModelとMySQL Abstraction Layerを可能な限り簡単に使用するための、ちょっとしたミニORM。それがあなたを助けるかもしれないことを望んでいる: http://jelnivo.fr/miniOrm/
ブラジルのORM: http://www.hufersil.com.br/lumine 。 PHP 5.2以降で動作します。私の意見では、それはポルトガル語とブラジルの人々にとって最良の選択です、それはそれが理解しやすいドキュメンテーションとダウンロードのための多くの例を持っているので。
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";
}
MicroMVCには13 KB ORM があり、これは8 KB データベースクラス にのみ依存しています。また、すべての結果をそれ自体ORMオブジェクトとして返し、最新の静的バインディングを使用して、現在のオブジェクトのテーブルとメタデータに関する情報が各オブジェクトに埋め込まれないようにします。これにより、最も安いORMオーバーヘッドが発生します。
MySQL 、 PostgreSQL 、および SQLite で動作します。
特にActive RecordではなくData Mapperパラダイムを実装するORMを探しているのであれば、 GacelaPHP をご覧になることを強くお勧めします。
ガセラの特徴:
他のORMソリューションでは、リモートで複雑なものを開発する場合、膨大すぎるか、または面倒な制限があります。 Gacelaは、データベースとMemcachedとのすべてのやりとりに PDO を使用して膨らみを最小限に抑えながらデータマッパーパターンを実装することで、アクティブレコードアプローチの制限を解決します。
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とActive Record/ORMは直接使用できますが、Agile Toolkitはそれらをユーザーインターフェースおよび jQuery UI とさらに統合します。これは JSF と似ていますが、純粋なPHPで書かれています。
$this->add('CRUD')->setModel('Employee');
これはAJAXified CRUD with Employeeモデルを表示します。
PHP ORM Faces for PDOエクステンション。 PHP Faces Frameworkを参照してください。
$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
私たちが使っているもう一つの素晴らしいオープンソースPHP ORMは PHPSmartDb です。それは安定しており、あなたのコードをより安全でクリーンにします。その中のデータベース機能は私が今まで使ったことがない最も簡単なPHP 5.3です。
Sado はシンプルなPHP ORMパッケージで、使いやすく、ビデオチュートリアルを提供しています。
本当に良い単純なORMは MyActiveRecord です。 MyActiveRecordのドキュメント 。私はそれをたくさん使ってきました、そしてそれはとても単純でよくテストされていると言うことができます。
http://code.google.com/p/lworm/ をご覧ください。これは、PHP用の本当にシンプルだが強力で軽量なORMシステムです。必要に応じて、簡単に拡張することもできます。
Doctrineはおそらくあなたの最善の策です。 Doctrineより前では、 DB_DataObject は基本的に他のオープンソースのユーティリティでした。
PdoMap を試してください。ウィキペディアは、Hibernateに触発されたと主張しています。 Hibernateを使ったことがないので、:)と判断することはできませんが、他のORMよりも学習曲線がそれほど急峻ではなく、実装が簡単で高速で優れたORMであると私は経験から言えます。
QCubedフレームワークには素晴らしいORMが含まれています 。それはコード生成と足場に基づいています。リフレクションに基づいていて一般的に遅いActiveRecordとは異なり、コード生成ではデータベースに基づいてスケルトンクラスを作成し、後でそれらをカスタマイズできます。それは魅力のように働きます。
シリアスORM を見ました。これは新しいORMであり、プロジェクトは開発段階にありましたが、次の段階では1.0バージョンでリリースされる予定です。