2012-01-19 13 views
0

ORMの2つのアプローチの間で最適化が望ましいかどうかを知りたいと思います。DoctrineとSymfonyのベストプラクティス

  • 私は私のオブジェクトの条件付きQueryBuilderを作成し、クエリ
  • の私の条件を尊重するオブジェクトの配列を取得し、getDoctrine()->findAll()持つすべてのオブジェクトを取得し、私は私のオブジェクトに適用される条件をPHPでチェック

私は特にホテルの予約や一部の部屋の空き状況には不思議です。この種の検索には、複雑なクエリを持つ多くの異なるエンティティが含まれます。ちょうどquerybuilderについて考えると、私は頭痛になります...しかし、私はそれがphpのすべてのentitesを埋めるために、そして私の関数を適用するための最良の方法だとは思えません....

+0

私は本当に質問を理解していない -

は、私がここで見つけることができ教義といくつかのベストプラクティスにブログ記事を書きました。一般的なパターンは、特定のタイプに一致するエンティティを取得するために呼び出すことができるサービスクラスを持つことです。例えば$ rooms = $ bookingService-> getUnbookedRoomsForDateRange($ datetime1、$ datetime2)。あなたはその機能の中で何をするかはあなた次第です(DQL、クエリービルダー、SQLを使用するか、Webサービス経由でプルインする...) – calumbrodie

+0

私もこの質問を理解しません。 –

答えて

0

私はいつもより良いと思いますQueryBuilder (または単にDQLクエリを書く)結果を得ることができます。

getDoctrine()->findAll()コールですべてのオブジェクトを取得すると、PHPオブジェクトが作成され、その値がすべての結果に設定されます。その後、あなたのPHPスクリプト(確かにデータベースよりも遅いです)は興味深いオブジェクトだけを保持します。garbadgeがたくさんあります。

QueryBuilderを使用すると、データベースはクエリの処理を最適化し、興味のあるオブジェクトのみを返します。あなたは多くのオブジェクトのインスタンス化を避け、PHPで結果をフィルタリングする必要はありません。

1

一般的に、クエリビルダーを使用して作成されたクエリでは、必要なオブジェクトを取得する必要があります。あなたは->findAll()であなたのエンティティをすべて取得し、その後、非常にリソース集約的である可能性があるので、phpでフィルタリングするべきではありません。データベースに1,000,000のエントリがあると想像してください。

ホテルの予約と空室状況を確認している場合は、PHPですべてのオブジェクトをチェックするのではなく、空き状況があるオブジェクトのみを返すクエリを作成します。 http://www.uvd.co.uk/blog/some-doctrine-2-best-practices/

+0

リンクが壊れています。回答を更新できますか? – edigu

+0

@foozyリンクを更新しました:-) –

+0

素晴らしい!ありがとう.. – edigu

関連する問題