我有一个实体,比如A.和另一个B。
A = {id,name} B = {id,details}
我想要一对一的关系。基本上对于来自A的每个x,必须恰好有一个来自B的y和相反的y。所以我考虑了解决方案并想出了以下内容。
但基本上它会是这样的。
A={same_id,name} B={same_id,details} same_id is unique
但我希望能够从A中获取详细信息。 基本上做$ a-> getAB() - > getDetails(); 这意味着我们需要实施2)。
但这听起来违反直觉,因为这意味着,必须首先创建一个新的B实体,然后创建一个A实体并将其指向B实体。
看起来B拥有A - 并不是我想要的。
反过来 - 如果B有A的外键,我还能告诉A关于B的存在吗,所以我可以做$ a-> getAB() - > getDetails();吗
所以它会像:A={id,name,bId} B={bId,details} bId is unique, id is unique
但是就这样 - 似乎我在为A浪费一个专栏。 B也不会知道它也附属于A,这也许是一种不好的做法。
编辑:但这并没有解决任何问题,只是注意到我必须再次创建B,因为来自A的任何x需要指向来自B的有效y。
目前,我正从MySQL数据库生成XML映射和实体类。
可能是这一代人不会自动告诉A B是否有外键吗?
答案 0 :(得分:1)
One-To-One, Bidirectional association正是您所寻找的(类似于您在第2点中的示例)
是的 - 拥有很重要。另请阅读owning and inverse sides of associations的概念
我会说你的例子中A
是拥有者 - 它有一个名字。名称通常比细节更重要。
同时创建两个实体没有问题;
$a = new A();
$a->setName("Alpha");
$b = new B();
$b->setDetails("Alpha goes first");
$a->setB($b);
$em->persist($a)->flush();
并且两个实体都会知道对方:
$a->getB();
$b->getA();
再次 - 必须有一个拥有的一方,你必须保持逻辑。