DoctrineおよびPropelと容易に統合されるsymfonyを使用して新しいプロジェクトを開始していますが、もちろん選択を行う必要があります.... 経験豊富な人々が、一般的な賛否両論を持っているかどうか疑問に思っていました.この2つのどちらか?
どうもありがとう。
編集: すべての応答、有用なものをありがとう。この質問に対する真の正解はないので、最も人気のある賛成票を獲得したものを承認済みとしてマークします。
私はDoctrineで行きます。それはより活発なプロジェクトであり、symfony のデフォルトの ORM であるため、より適切にサポートされているように私には思えます (公式には ORM は等しいと見なされていますが)。
さらに、クエリの操作方法が好きです (基準ではなく DQL):
<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);
// Doctrine
$items = Doctrine_Query::create()
->from('Example e')
->leftJoin('e.Foobar')
->where('e.id = ?', 20)
->execute();
?>
(Doctrine の実装は私にとってより直感的です)。
また、Doctrine でリレーションを管理する方法も気に入っています。
Doctrine ドキュメントのこのページは読む価値があると思います: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
要約すると、もし私が新しいプロジェクトを始めていたり、Doctrine と Propel のどちらを学ぶかを選択しなければならなかった場合、私はいつでも Doctrine を選びます。
私は Propel の次のリリースで少し手助けをするので偏見がありますが、Propel は実際に利用可能な最初の ORM であり、Doctrine が作成されたときに少し遅れましたが、現在は再び活発な開発が行われていることを考慮する必要があります。Symfony 1.3/1.4 には Propel 1.4 が付属しており、ほとんどの比較は Propel 1.3 で終わります。また、Propel の次のリリース (1.5) には、特に基準の作成において多くの改善が含まれます (その結果、作成するコードが少なくなります)。
私が Propel を気に入っているのは、Doctrine ほど複雑ではないように思われるからです: ほとんどのコードは生成された少数のクラスに含まれていますが、Doctrine は多くのクラスに機能を分割しています。私は自分が使用しているライブラリをよく理解したいと思っています (あまり「魔法」ではありません) が、もちろん、私は Propel の経験が豊富なので、Doctrine は舞台裏でそれほど複雑ではないかもしれません。Propel の方が速いと言う人もいますが、これは自分で確認し、他の違いよりも重要かどうかを検討する必要があります。
おそらく、さまざまなフレームワーク用の Symfony プラグインの可用性も考慮する必要があります。ここでは Propel が有利だと思いますが、一覧にあるプラグインのうち、最新バージョンの Symfony にまだ対応しているプラグインがいくつあるかはわかりません。
それは個人的な好みに帰着します。私が Propel を使用しているのは、(とりわけ) すべてに独自の具体的な getter および setter メソッドがあるという事実が気に入っているからです。Doctrine では、そうではありません。
推進、動かす:
$person->setName('Derek');
echo $person->getName();
教義:
$person->name = 'Derek';
echo $person->name;
ゲッターとセッターが好きな理由は、必要に応じてあらゆる種類のロジックをそれらに入れることができるからです。しかし、それは私の個人的な好みです。
また、Propel は以前は動きが鈍かったものの、現在は再び活発に開発されていることも付け加えておきます。過去数か月でいくつかの新しいバージョンがリリースされました。Propel の最新バージョンには、Doctrine の に似た「流暢なクエリ インターフェース」が含まれているため、必要がなければ Criteria を使用する必要はありません。
Doctrine 2は現在開発中[ed] に リリースされており、Doctrine 1 の現在の安定バージョンとはほぼ完全に異なる機能を持っていることに注意してください。アクティブ レコードの代わりにデータ マッパー パターンに依存し、「エンティティ マネージャー」を使用して永続性を処理します。論理。リリースされると、Java の Hibernate により近いものになります (Doctrine 1 は Rails の ActiveRecord に似ています)。
私は Doctrine 2 のアルファ版リリースで開発を行ってきましたが、これは Doctrine 1 よりもはるかに優れていると言わざるを得ません (私の意見であり、Propel を使用したことはありません)。Doctrine コミュニティがリリースされたときにそれに向けて動く可能性は十分にあります。
Doctrine をチェックすることをお勧めしますが、Propel と Doctrine が現在使用している Active Record スタイルを好む場合は、Propel に固執することをお勧めします。
2つの参照はやや時代遅れであるため、いくつかの一般性をカバーしています。基本的には、フレームワーク自体の経験を評価する必要があります。Doctrineの主な欠点は、その推進力で自動コーディングできるIDEを使用できないことです。勝者、学習曲線の推進力と教義は非常に異なります。プロジェクトで複雑なデータモデルを管理する必要がある場合は、教義を使用します。最も文書化されているORMをすばやく操作し、Propelでより多くのサポートを見つけたい場合は、推進しやすくなります。インターネットの使用は、はるかに成熟しており、最も使用されていると思います。
IDE のオートコンプリート機能により適した propel 1.6 を使用することをお勧めします。
私は PHP 5 の非フレームワーク ORM のユーザーではありませんが、ここにいくつかの優れた比較記事があります (まだ見ていない場合に備えて)。
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
どちらの結論も、Symfony の新しい世代の ORM として Doctrine の方が好きです。
DbFinder Pluginを使用することをお勧めします。これは実際には両方をサポートする非常に強力なプラグインであり、非常に強力です。私は実際にどちらよりもそれを使用するのが好きです。