我认为熟悉 ORM 是一项很好的 Assets ,并选择了 Doctrine 2 作为 ORM 的选择。
我正在做一个测试项目来学习 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(原则查询语言)还是有办法轻松获取关联实体?我的意思是,否则就没有任何意义,对吧?另外,我是否正确地进行了这些关联?我真的对这个非常基本的模型感到困惑......非常感谢详细的帮助。谢谢。
最佳答案
首先,不要太担心数据库设计。您应该设计您的实体并使用 SchemaTool .
Now, the question is, is there a simple way of accessing all the orders from the user model?
您是指访问用户模型中的所有订单,还是访问与用户关联的所有订单?
如果您指的是前者,那么您就做错了(见下文)。如果你的意思是后者,你应该设置一个 bi-directional relationship订单和用户之间。 (顺便说一句,这将是 OneToMany 而不是 OneToOne,因为一个用户可能有很多订单)。
I'm really confused in this very basic model...
我认为您和许多 PHP 程序员遇到的问题是对 DataMapper pattern 的基本理解。最后还有领域驱动设计。请记住,您正在处理持久对象,而不是数据库表。
我无法在此处提供详细信息,因为我正在写一本书,因此我建议您获得一本关于领域驱动设计的书,以帮助您开始了解这些原则。有一些很好的在线资源可用,例如 Federico Cargnelutti 的一系列博客文章。 ,但是它们并不特定于 Doctrine 2。
关于php - 获取 Doctrine 2 中的相关条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4928170/