- ほとんどのORMはモデルクラスを使用します。これは、クエリの実行とデータベース内のレコードの表現の両方に使用されます。 たとえば、KohanaとLaravelはこれを行います。 PHPixieは、モデルをRepository、Entity、およびQueryに分割しました。それぞれが厳密に意図された目的を持っています。
- SQLデータベース(SQLite、PostgreSQL、MySQL)に加えて、Mongoも完全にサポートされています。 モデルの関係をSQLデータベースとMongoコレクションに保存されているモデルに関連付けることができます。
- 異なるデータベース間の接続(たとえば、MySQLの異なるデータベースのテーブル間)を維持するために、多くのORMは結合とサブクエリの代わりに個別のクエリを使用します。 PHPixieは、可能な限りサブクエリを使用します。
- Mongoの埋め込みエンティティサポート
- 単体テストは97% (今週の終わりまでに100%を計画)、および75%の機能テストをカバーしました 。
- クエリを効果的に使用すると、データベースへのクエリの数を減らすことができます。 たとえば、作成者のすべてのトピックをいくつかのタグに関連付ける必要があります。 ほとんどのORMでは、最初にトピックを見つけ、次にタグを見つけてから、それらをリンクする必要があります(3つのデータベースクエリ)。 PHPixieでは、1回のリクエストでこれを行うことができます。 ちなみに、この例は以下のチュートリアルにあります
興味を持っていただければ幸いです。今度は翻訳の上記リンクから例を見てみましょう。
<?php require_once('vendor/autoload.php'); $config = new \PHPixie\Config(); // $database = new \PHPixie\Database($config->dataStorage(array( 'default' => array( 'driver' => 'pdo', 'connection' => 'sqlite::memory:' ) ))); // $orm = new \PHPixie\ORM($database, $config->dataStorage(array( 'relationships' => array( array( // 'type' => 'oneToMany', 'owner' => 'fairy', 'items' => 'flower' ) ) ))); // $connection = $database->get('default'); $connection->execute(' CREATE TABLE fairies ( id INTEGER PRIMARY KEY, name VARCHAR(255) ) '); $connection->execute(' CREATE TABLE flowers ( id INTEGER PRIMARY KEY, name VARCHAR(255), fairy_id INTEGER ) '); // // Repositories, Entities Query /* : $fairy->name = 'Trixie'; $fairy->save(); $fairy->where('name', 'Stella')->find(); */ // $fairyRepository = $orm->get('fairy'); $flowerRepository = $orm->get('flower'); // // // $trixie = $fairyRepository->create(); $trixie->name = 'Trixie'; $trixie->save(); // $fairyRepository ->create(array('name' => 'Stella')) ->save(); // foreach(array('Red', 'Yellow', 'Green', 'Purple') as $name) { $flowerRepository ->create(array('name' => $name)) ->save(); } // Query // WHERE `id` > 1 AND ( `name` = 'Green' OR `name` = 'Red') $green = $flowerRepository->query() ->where('id', '>', 1) ->startAndWhereGroup() ->where('name', 'Green') ->or('name', 'Red') ->endGroup() ->findOne(); // $green = $flowerRepository->query() ->where('id', '>', 1) ->and(function($q){ $q ->where('name', 'Green') ->or('name', 'Red') }) ->findOne(); // // // 'flowers' add(), remove() removeAll() // addFlower(), removeFlower() removeAllFlowers() $trixie->flowers->add($green); // , // // , // oneToMany . manyToMany assert($green->fairy() == $trixie); // Green c Stella // // $stellaQuery = $fairyRepository->query() ->where('name', 'Stella'); // $allExceptGreen = $flowerRepository->query() ->whereNot('name', 'Green'); // $stellaQuery->flowers->add($allExceptGreen); // Query // Purple Blue $flowerRepository->query() ->where('name', 'Purple') ->update(array( 'name' => 'Blue' )); // : $trixie = $fairyRepository->query() ->relatedTo('flowers', $green) ->findOne(); // // $fairies = $fairyRepository->query() ->relatedTo('flowers') ->find(array('flowers')); // // // json_encode() print_r($fairies->asArray(true)); // =)
自分でこの例を試すのは非常に簡単です:
git clone https://github.com/phpixie/orm cd orm/examples # curl -sS https://getcomposer.org/installer | php php composer.phar install php quickstart.php
このORMは1年以上にわたって開発されたものであり、お客様のご質問やコメントに非常に興味を持っています。コメントをお待ちしております。