2011-02-08 11 views
2

私は、ORMに慣れ親しんで、Doctrine 2をORMとして選択することが良い資産であると判断しました。Doctrine 2に関連するエントリを取得する

私はDoctrineの基礎を学ぶためのテストプロジェクトに取り組んでいます。ほとんどの人は通常ブログを使いますが、注文を保存して追跡できる基本的なアプリを作ることに決めました。次のように私のデータベーススキーマは次のようになります。したがって

User 
    id 
    name 
Product 
    id 
    name 
    price 
Sales_order 
    id 
    user_id 
    product_id 
    quantity 
    unit_price 

、私の注文モデルは次のようになります。今

/** 
* @Entity 
* @Table(name="sales_order") 
*/ 
class Order { 

    /** 
    * @Id 
    * @Column(type="integer", nullable=false) 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $Id; 

    /** 
    * @OneToOne(targetEntity="User", inversedBy="user") 
    */ 
    private $user; 

    /** 
    * @OneToOne(targetEntity="Product", inversedBy="product") 
    */ 
    private $product; 

    /** 
    * @Column(type="integer", nullable=false) 
    */ 
    private $quantity; 
} 

、質問は、あるユーザモデルからすべての注文にアクセスする簡単な方法があります?私はDQL(doctrine query language)をこれらの基本的なものに書くべきですか、それとも関連するエンティティを簡単に取得する方法はありますか?私はそうでなければこれには何の指摘もないでしょう、そうですか?また、私はこれらの関連を正しく行っていますか?私はこの非常に基本的なモデルで本当に混乱しています...詳細なヘルプは本当に感謝しています。ありがとうございました。

答えて

2

まず、データベース設計について心配しないでください。 にエンティティをデザインし、SchemaToolを使用する必要があります。

ここで、ユーザーモデルからすべての注文にアクセスする簡単な方法がありますか?

あなたはユーザーに関連するすべての注文ユーザモデル、またはアクセスからの注文のすべてにアクセスする意味ですか?

あなたが前者を意味するのであれば、あなたは間違ったことをしています(下記参照)。後で説明する場合は、注文とユーザーの間にbi-directional relationshipを設定する必要があります。 (1人のユーザーが多数の注文をする可能性が高いため、OneToManyはOneToOneではありません)。私はこの非常に基本的なモデルでは本当に困惑している


...

私はあなたとのトラブル持つものを考える - 多くのPHPプログラマと一緒に - DataMapper patternの基本的な理解であると最終的にはドメイン駆動設計にもなります。データベーステーブルではなく、永続オブジェクトを扱っていることに注意してください。

私は本を書いているので、ここで詳細な情報を提供することはできません。そのため、原則から始めるためにドメインドリブンデザインに関する本を入手することをお勧めします。 Federico Cargneluttiの一連のブログ記事のように、利用できるオンラインリソースはいくつかありますが、Doctrine 2に固有のものではありません。

+0

私が探していたのは双方向の1対多の関係でした。今それは意味がある...ありがとう! –

関連する問題