如何以编程方式添加/删除实体的映射

时间:2016-10-17 16:45:33

标签: doctrine-orm doctrine doctrine-mapping

我有一个处理程序,它对两种不同类型的查询使用相同的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注释的字段(ididInstrum,{{1 },idDevice)。为此,我使用原始查询,并通过instrumType

映射数据
ResultSetMapping

它就像一个魅力。问题在于需要在 $rsm = new ResultSetMapping; $rsm->addEntityResult('Belka\Iso50k1Bundle\Entity\PhyMeter', 'mt'); $rsm->addFieldResult('mt', 'id', 'id'); ... 表上保留数据的其他处理程序的方法:我真正想要保留的是属性的小部分(即只是app.meterid但不是idInstrum,以便在我的新表格架构中没有该列。

我在考虑使用instrumType,但我不确定它是否是正确的方法:我真正想要的是根据我的需要手动添加/删除一些ORM映射(即不同的处理程序&# 39; s函数)

这可能吗?我可以删除不需要保留的映射(StaticPHPDriver注释),但这样我无法使用@ORM\column映射额外的属性,除非我可以通过编程方式添加它。

任何提示都非常受欢迎

0 个答案:

没有答案