教义多对一多目标实体

时间:2018-12-08 18:43:34

标签: doctrine

我在项目中使用Doctrine ORM,但是我的表存在问题:

  • 设备(ID,名称,IP地址)
  • device_group(ID,名称)
  • 模板(id,object_type,object_id)

因此,这三个实体从父类扩展到通用字段,例如ID,时间戳...

如果我们看一下模板实体,则object_id字段指的是device.id或device_group.id,具体取决于object_type的值(可以是'device'或'group'的字符串)。我想知道如何建立一个有多个目标的关系。

设备组:

/**
 * @ORM\Entity(repositoryClass="App\Doctrine\Repositories\DeviceGroup")
 * @ORM\Table(name="device_group")
 */
class DeviceGroup extends BaseModel
{

    /**
     * @ORM\Column(type="string", name="name", length=255)
     */
    protected $name;

}

设备

/**
 * @ORM\Entity(repositoryClass="App\Doctrine\Repositories\Device")
 * @ORM\Table(name="device")
 */
class Device extends BaseModel
{

    /**
     * @ORM\Column(type="string", name="name", length=255)
     */
    protected $name;

    /**
     * @ORM\Column(type="string", name="ip_address", length=45)
     */
    protected $ip_address;
}

模板

**
 * @ORM\Entity(repositoryClass="App\Doctrine\Repositories\Template")
 * @ORM\Table(name="template")
 */
class DevicePart extends BaseModel
{
    /**
     * @ORM\Column(type="string", name="object_type", length=6)
     */
    protected $object_type;//can be 'group' or 'device'

    /**
     * Many DevicePart have one Object
     * @ORM\ManyToOne(targetEntity="?????????")
     * @ORM\JoinColumn(name="object_id", referencedColumnName="id")
     */
    protected $objects;

    //target entity can be : App\Doctrine\Entities\Device" or "App\Doctrine\Entities\DeviceGroup

}

我听说过继承映射,并且已经使用超类实现了它,我看了一些示例,但这会使我创建新表,但由于数据被其他程序使用,所以我必须保留当前结构(带有Python脚本的SQL炼金术)。

你有什么主意吗?

先谢谢您

0 个答案:

没有答案