2011-02-08 57 views
2

我已經決定熟悉ORM並將其作爲所選ORM的Doctrine 2是一個很好的資產。在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(原則查詢語言)還是有辦法輕鬆獲得關聯的實體?我的意思是,除此之外沒有任何意義,對吧?另外,我是否正確地做這些關聯?我真的很困惑這個非常基本的模型......詳細的幫助真的很感激。謝謝。

回答

2

首先,不要太擔心數據庫設計。你應該設計你的實體並使用SchemaTool

現在,問題是,是否有一種簡單的方式來訪問用戶模型中的所有訂單?

你的意思是訪問所有從訂單的關聯一個用戶用戶模型,或訪問所有的訂單?

如果你的意思是前者,那麼你做錯了事(見下文)。如果你的意思是後者,你應該在訂單和用戶之間設置一個bi-directional relationship。 (順便說一句,OneToMany不是OneToOne,因爲一個用戶可能會有很多訂單)。


我在這個非常基本的模式真的很困惑......

我想你遇到的麻煩是什麼 - 與許多PHP程序員一起 - 是DataMapper pattern的基本認識和最終領域驅動設計也是如此。請記住,您正在處理可持久對象,而不是數據庫表。

我不能在這裏提供詳細的信息,因爲我會寫一本書,因此我建議你拿一本有關域驅動設計的書籍來幫助開始使用這些原則。有一些很好的在線資源可用,如Federico Cargnelutti的一系列博客帖子,但它們並非特定於Doctrine 2.

+0

雙向一對多關係就是我所期待的。現在它是有道理的...謝謝! – 2011-02-08 09:09:02

相關問題