这种一对一的关系可能与学说(在Symfony)?
User Time
+----------+ +-------+
| ... | | ... |
| time_id |o-----+-----o| user |
| | | | ... |
| time2_id |o-----+ | type |
| ... | +-------+
+----------+
也就是说,用户可能有两个不同的时间实体与之关联:一个类型=0,另一个类型=1。
我本可以将Time拆分为两个不同的实体,但我认为这样可以避免复制一些代码,因为Time实体有一个eventListener和更多关联的代码...
我把它编码成这样:
class Time
{
...
/**
* @ORM\OneToOne(targetEntity=User::class, mappedBy="time, cascade={"persist"})
* @ORM\OneToOne(targetEntity=User::class, mappedBy="time2", cascade={"persist"})
*/
private $user;
...}
class User
{
...
/**
* @ORM\OneToOne(targetEntity=Time::class, inversedBy="user", cascade={"persist"})
* @ORM\JoinColumn(name="time_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
private $time;
/**
* @ORM\OneToOne(targetEntity=Time::class, inversedBy="user", cascade={"persist"})
* @ORM\JoinColumn(name="time2_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
private $time2;
...}
事实上,我正在完美地使用它,但Symfony默默地抱怨(在Symfony工具栏/Doctrine/实体Map〉Map错误中):
App\Entity\User
The mappings App\Entity\User#time2 and App\Entity\Time#user are inconsistent with each other.
显然,Doctrine不喜欢**$user上的第二个@ORM\OneToOne**,并将其丢弃。
这段代码会导致什么样的假仁假义的错误行为?
注:条令/通用v2.11
1条答案
按热度按时间62lalag41#
FWIW中,只要一个人放弃使Bidirectional Association:
执行者:
对于Owning与Inverse关系,也是look at this link。
在我的例子中,这完全符合我的需要,因为相反的部分是针对如下方法的:
$Time->getUser();
我能预知。