尝试创建一个抽象FileAttachment
类并为每个entity_type
ie EntityOneAttachment
、EntityTwoAttachment
等扩展它。
扩展类都将引用相同的连接列entity_id
,但将其映射到各自的实体。
/**
* @ORM\Entity
* @ORM\Table(name="file_attachment")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="entity_type", type="string")
* @ORM\DiscriminatorMap({"entity_one_attachment" = "EntityOneAttachment", "entity_two" = "EntityTwoAttachment"})
*/
abstract class FileAttachment
{
/**
* @ORM\ManyToOne(targetEntity="File")
* @ORM\JoinColumn(name="file_id", referencedColumnName="id", nullable=false)
**/
protected $file;
}
/**
* @ORM\Entity
*/
class EntityOneAttachment extends FileAttachment
{
/**
* @ORM\ManyToOne(targetEntity="EntityOne", inversedBy="fileAttachments")
* @ORM\JoinColumn(name="entity_id", referencedColumnName="id", nullable=false)
**/
protected $entityOne;
}
/**
* @ORM\Entity
*/
class EntityTwoAttachment extends FileAttachment
{
/**
* @ORM\ManyToOne(targetEntity="EntityTwo", inversedBy="fileAttachments")
* @ORM\JoinColumn(name="entity_id", referencedColumnName="id", nullable=false)
**/
protected $entityTwo;
}
然后将每个实体映射到其各自的附件类。
class EntityOne
{
/**
* @ORM\OneToMany(targetEntity="EntityOneAttachment", mappedBy="entityOne")
**/
protected $fileAttachments;
}