Я использую Doctrine ORM для своего проекта, и у меня есть проблема с моими таблицами:
- устройство (id, имя, ip_address)
- device_group (id, name)
- template (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
}
Я слышал о отображении наследования и уже реализовал это в своем суперклассе, я посмотрел несколько примеров, но это заставило бы меня создавать новые таблицыдело в том, что я должен сохранить текущую структуру, так как данные используются другими программами (SQL Alchemy со скриптами Python).
У вас есть идеи?
Заранее благодарю,