我面临一些有关实体之间的OneToOne关系的问题。 替代之处在于,所有者方可以是多个类(同一类的所有子类)。
我有Process
,其中有几个子实体类(例如,以ProcessPassport
,ProcessIdentityCard
和ProcessCadaster
为例)
我的某些子实体需要与另一个实体TaxStamp
建立联系,但并非全部。因此,我无法将此关联放入Process
主实体中。
相反,我创建了一个特征TaxStampTrait
,其中包含我的关系映射。
但这不能正常工作:
TaxStamp
实体上的关联定义多种可能性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;
// ...
}
如果您需要任何其他信息,请随时问我:)