我有一个处理程序,它对Entity
两种不同的查询使用相同的处理程序:
/**
* @ORM\Entity
* @ORM\Table(name="app_iso50k1.meter", schema="app_iso50k1")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="mettype", type="string")
* @ORM\DiscriminatorMap({"phy" = "PhyMeter"})
*/
abstract class Meter
{
const TYPE_PHYSICAL = 'PHY';
const TYPE_VIRTUAL = 'VIR';
const TYPE_LOGICAL = 'LOG';
/**
* @ORM\Column(type="string")
* @ORM\Id
*/
protected $id;
<methods>
}
/**
* @ORM\Entity
* @ORM\Entity(repositoryClass="PhyMeterRepository")
* @HasLifecycleCallbacks
*/
class PhyMeter extends Meter
{
/**
* @ORM\Column(type="integer", nullable=false)
*/
protected $idInstrum;
/**
* @ORM\Column(type="integer", nullable=false)
*/
protected $idDevice;
/**
* @ORM\Column(type="integer")
*/
protected $instrumType;
...<methods>
}
第一个处理程序的方法是在遗留数据库表上执行的,它需要映射所有用@ORM\Column
( id
, idInstrum
, idDevice
, instrumType
) 注释的字段。为此,我使用原始查询并通过ResultSetMapping
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Belka\Iso50k1Bundle\Entity\PhyMeter', 'mt');
$rsm->addFieldResult('mt', 'id', 'id');
...
它就像一个魅力。问题出在需要在表上持久化数据的其他处理程序的方法上app.meter
:我真正想要持久化的是属性的一小部分(即只是id
,idInstrum
但不是instrumType
为了在我的新表的架构中没有该列.
我正在考虑使用StaticPHPDriver
,但我不确定它是否是正确的方法:我真正想要的是根据我的需要手动添加/删除一些 ORM 映射(即不同的处理程序的功能)
那可能吗?@ORM\column
我可以删除不需要保留的映射(注释),但是这样我就不能通过 using 映射额外的属性ResultSetMapping
,除非我可以以编程方式添加它。
任何提示都非常受欢迎