Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Doctrine2一对一正确完成_Php_Mysql_Doctrine Orm - Fatal编程技术网

Php Doctrine2一对一正确完成

Php Doctrine2一对一正确完成,php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,我有一个实体,比如说A和另一个B A={id,name}B={id,details} 我想要一对一的关系。基本上,对于A的每个x,必须正好有一个y来自B,反之亦然。因此,我考虑了解决方案,并提出了以下建议 1.该id是共享的。 但基本上是这样的。 A={same\u id,name}B={same\u id,details}same\u id是唯一的 B将有一个外键,用于a的相同\u id 或者A将有一个外键用于相同的\u id到B。相同的\u id 但我想从A那里得到细节。 基本上做$a-

我有一个实体,比如说A和另一个B

A={id,name}B={id,details}

我想要一对一的关系。基本上,对于A的每个x,必须正好有一个y来自B,反之亦然。因此,我考虑了解决方案,并提出了以下建议

1.该id是共享的。 但基本上是这样的。
A={same\u id,name}B={same\u id,details}same\u id是唯一的

  • B将有一个外键,用于a的相同\u id
  • 或者A将有一个外键用于相同的\u id到B。相同的\u id
但我想从A那里得到细节。 基本上做$a->getAB()->getDetails(); 这意味着我们需要实现2)

但这听起来有悖常理,因为这意味着,必须首先创建一个新的B实体,然后创建一个a实体并将其指向B实体

看起来B拥有A,这不是我想要的

反过来-如果B有a的外键,我还能告诉a B的存在吗,这样我就可以做$a->getAB()->getDetails()

2.B有另一个id,A有一个外键: 所以它会像:
A={id,name,bId}B={bId,details}bId是唯一的,id是唯一的

但这样看来,我似乎是在浪费一篇专栏文章。 B不会知道它也附在A上,这可能是一种不好的做法

编辑:但这并不能解决任何问题,只是注意到我必须再次创建B,因为A中的任何x都需要指向B中的有效y。

3.是否存在自动生成映射的问题? 目前,我正在从MySQL数据库生成XML映射和实体类

可能是这一代人不会自动告诉A B是否有外键吗?

就是您要寻找的(类似于第2点中的示例)。
是的,拥有是很重要的。还请阅读有关的概念。
我想在你的例子中说,
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();

再说一次-必须有一个拥有方,你必须保持逻辑。

谢谢,我已经阅读了所有关于它的内容,现在它工作了。但不幸的是,我遇到了另一个问题——反面总是自动加载,这很糟糕。。。我有什么补救办法吗?或者我应该不告诉对方这个关系吗?我认为它与,和