双向一对一关系

时间:2018-10-10 15:35:49

标签: symfony doctrine-orm doctrine symfony-3.4

我面临一些有关实体之间的OneToOne关系的问题。 替代之处在于,所有者方可以是多个类(同一类的所有子类)。

这是摘要

我有Process,其中有几个子实体类(例如,以ProcessPassportProcessIdentityCardProcessCadaster为例)

我的某些子实体需要与另一个实体TaxStamp建立联系,但并非全部。因此,我无法将此关联放入Process主实体中。 相反,我创建了一个特征TaxStampTrait,其中包含我的关系映射。

但这不能正常工作:

  1. 我无法为TaxStamp实体上的关联定义多种可能性
  2. Doctrine告诉我该关系的注释中有错误,因为我引用了Process(合法,因为只有某些实体使用TaxStampTrait

问题:我应该怎么做才能使它们正确地工作?

以下是要点,其中概述了代码和类:https://gist.github.com/bastos71/8e15f69ebecf5e97dc75187d130fe109

<?php

/**
 * @ORM\Entity(repositoryClass="ProcessRepository")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 */
class Process
{
    // ...
}

<?php
/**
 * @ORM\Entity(repositoryClass="ProcessCadasterRepository")
 */
class ProcessCadaster extends Process implements EntityWithTaxStampInterface
{
  use TaxStampTrait;
  // ...
}

<?php
/**
 * @ORM\Entity(repositoryClass="ProcessIdentityCardRepository")
 */
class ProcessIdentityCard extends Process implements EntityWithTaxStampInterface
{
  use TaxStampTrait;
  // ...
}

<?php
/**
 * @ORM\Entity(repositoryClass="ProcessPassportRepository")
 */
class ProcessPassport extends Process implements EntityWithTaxStampInterface
{
  use TaxStampTrait;
  // ...
}

<?php
/**
 * @ORM\Entity(repositoryClass="TaxStampRepository")
 */
class TaxStamp
{
    /**
     * @ORM\OneToOne(targetEntity="Advercity\AdminBundle\Entity\Process", mappedBy="taxStamp")
     */
    private $process;

    // ...
}

<?php
trait TaxStampTrait
{
  /**
   * @ORM\OneToOne(targetEntity="TaxStamp", cascade={"persist"})
   * @ORM\JoinColumn(name="tax_stamp_id", referencedColumnName="id")
   */
  private $taxStamp;

  // ...
}

如果您需要任何其他信息,请随时问我:)

0 个答案:

没有答案