Forms symfony2原则一对一关系

Forms symfony2原则一对一关系,forms,symfony,doctrine-orm,indexing,entity-relationship,Forms,Symfony,Doctrine Orm,Indexing,Entity Relationship,我有两个问题 我的第一个问题来自于一对一单向和一对一双向之间到底有什么区别,以及何时使用它们 第二,我是一对一的 /** * @ORM\OneToOne(targetEntity="App\PurchaseBundle\Entity\Status", cascade={"persist"}) * @ORM\JoinColumn(nullable=false) */ private $status; 当我尝试保存表单时,出现了一个错误: Integrity constraint viola

我有两个问题

我的第一个问题来自于一对一单向和一对一双向之间到底有什么区别,以及何时使用它们

第二,我是一对一的

/**
 * @ORM\OneToOne(targetEntity="App\PurchaseBundle\Entity\Status", cascade={"persist"})
 * @ORM\JoinColumn(nullable=false)
 */
private $status;
当我尝试保存表单时,出现了一个错误:

Integrity constraint violation: 1062 Duplicate entry '1' for key 'UNIQ_9861B36D6BF700BD' 
我从医生那里了解到我需要进行双向关系,但我不明白为什么。我只想删除unique并用index替换它

谢谢


附:以防万一。我有一个实体采购,开始时状态为“order_created”,并将在后台的不同流程中更新

要回答您的第一个问题,我举一个例子: 如果您有一个与汽车有一对一单向关系的用户。在这种情况下,如果您有您的用户,您将能够找到他拥有的汽车。但是如果你有这辆车,你将无法找到拥有这辆车的用户。双向允许你用你的目标车找到你的用户

在第一种情况下,此代码将起作用:

$user->getCar();
但这是不可能的:

$car->getUser();
双向命令允许您同时执行这两个命令


希望这有助于理解概念。

明白了,为什么两个用户不能拥有同一辆车?我开始认为我需要的不是一对一,而是多对一。是的,在这种情况下,你必须在你的实体车上添加一个oneToMany,在你的用户上添加一个OneToOne。如果你想让两个用户拥有同一辆车,但每个用户只能拥有一辆车,我会再次用这一点来打扰你,但我不习惯这个概念,我很难弄清楚我需要做什么。我有实体购买和实体状态。总共有四种状态。”订单已创建“…”订单完成'。每次采购都具有创建订单时创建的订单状态。如果我做对了,我必须有一对一的购买和一对多的状态。对吗?我认为最好的选择是让实体具有$status属性,并在实体中设置4个常量。对于你的应用程序来说,它会轻得多,但是如果你真的需要用另一种方式去做,那就继续吧;但是如果你想用另一种方式做,这也是正确的,只是在我看来非常沉重。太好了。这些常数工作得很好。在使用symfony时,我几乎忘记了php中的常量。谢谢你的解释很完美