我在项目中使用Doctrine ORM,但是我的表存在问题:
因此,这三个实体从父类扩展到通用字段,例如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炼金术)。
你有什么主意吗?
先谢谢您