回答:
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)には、特にCriteriaの作成において、多くの改善が含まれます(その結果、作成するコードが少なくなります)。
Doctrineよりも複雑ではないように思われるので、私はPropelが好きです:ほとんどのコードは少数の生成されたクラスにありますが、Doctrineは機能を多くのクラスに分割しています。私が使用しているライブラリをよく理解したいのですが(あまり「魔法」ではありません)、もちろん、Propelの経験が豊富なので、Doctrineは舞台裏でそれほど複雑ではありません。Propelの方が速いと言う人もいますが、自分で確認して、他の違いよりも優れているかどうかを検討する必要があります。
たぶん、異なるフレームワークでSymfonyプラグインが利用できるかどうかも検討する必要があります。ここではPropelが有利だと思いますが、リストされているプラグインのうちいくつがSymfonyの最新バージョンでまだ最新であるかはわかりません。
それは個人的な好みに帰着します。(とりわけ)すべてが独自の具体的なゲッターとセッターメソッドを持っているという事実が好きなので、私はPropelを使用します。Doctrineでは、これはそうではありません。
推進、動かす:
$person->setName('Derek');
echo $person->getName();
教義:
$person->name = 'Derek';
echo $person->name;
ゲッターとセッターがあるのが好きな理由は、必要に応じてあらゆる種類のロジックをそれらに配置できるからです。しかし、それは私の個人的な好みにすぎません。
また、Propelは以前は動きが鈍かったが、現在は活発に開発されていることも付け加えておきます。過去数か月間にいくつかの新しいバージョンをリリースしました。最新バージョンのPropelにはDoctrineのに似た「流暢なクエリインターフェース」が含まれているので、必要がない場合はCriteriaを使用する必要はありません。
Doctrine 2は現在開発 リリース [ed]であり、Doctrine 1の現在の安定バージョンとはほぼ完全に機能が異なることに注意してください。ActiveRecordではなくData Mapperパターンに依存し、「エンティティーマネージャー」を使用して永続性を処理します論理。リリースされると、JavaのHibernateによく似たものになります(Doctrine 1はRailsのActiveRecordに似ています)。
私はDoctrine 2のアルファリリースを使用して開発しており、Doctrine 1よりも頭と肩が上であることを言わなければなりません(私の意見ですが、Propelを使用したことはありません)。Doctrineコミュニティーがリリースされたときに、それに向かって移動する可能性は高いです。
Doctrineをチェックすることをお勧めしますが、PropelとDoctrineが現在使用しているアクティブレコードスタイルを好む場合は、Propelをそのまま使用することをお勧めします。
2つの参照はやや古くなっているため、一般性についてはカバーしますが、基本的にはフレームワークでの経験を評価する必要があります。Doctrineの主な欠点は、そのpropelで自動コーディングできる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に対するお気に入りの結論です。
何年にもわたって両方を使用した後、私は単純にクエリロジックの構築方法に基づいて、DoctrineよりもPropel 2を好みます。Doctrineは、その深さのレベルに一致する多くの側面を取得および管理できるのと同じくらい深さです。Propelには、クエリの相互作用を構築および管理するための、より流動的でオブジェクト主導の方法があると感じています。
私にとっては、これによりモデル内のコードが減り、ロジックの処理方法や処理方法に関する構造が増えました。これにより、多くのインタラクションが共通の機能として構築されました。(結局のところ、データベースで行うことの90%は、ある程度のクラッド操作になるだけです。)
結局のところ、どちらも強力で管理しやすく、仕事を成し遂げるでしょう。私の個人的なプロジェクトと興味は、Propel ORM 2と将来のプロジェクトを使用しますが、PHPでまだ記述されている場合は、その道を進みます。
私は過去3〜4年間、両方を毎日使用しています。
DbFinderプラグインの使用をお勧めします。これは実際には両方をサポートする非常に強力なプラグインであり、非常に強力です。私はどちらかよりも実際にそれを使うのが好きです。
私が間違っていなければ、両方のORMがXMLベースのスキーマを使用しており、これらのスキーマ定義の作成はかなり面倒です。流暢なスタイルのPHPベースの単純なスキーマが必要な場合。自動移行とアップグレード/ダウングレードスクリプトジェネレーターをサポートするLazyRecord https://github.com/c9s/LazyRecordを試すことができます。また、すべてのクラスファイルはランタイムコストなしで静的に生成されます。