原则多个组合外键


Doctrine multiple composite foreign key

我试图构造一个对象,两个复合外键指向同一对象,但它们似乎具有相同的数据,例如只在一列product_id上进行连接。

class PostpaidProduct extends Product {
    /**
     * @ManyToOne(targetEntity="Bundle", fetch="EAGER", cascade={"persist"})
     * @JoinColumn(name="bundle_voice_id", referencedColumnName="id")
     */
    private $bundleVoice;
    /**
     * @ManyToOne(targetEntity="Bundle", fetch="EAGER", cascade={"persist"})
     * @JoinColumn(name="bundle_data_id", referencedColumnName="id")
     */
    private $bundleData;
    /**
     * @OneToMany(targetEntity="BundlePromo", mappedBy="product", fetch="EAGER", cascade={"persist"})
     * @JoinColumns({
     *   @JoinColumn(name="id", referencedColumnName="product_id"),
     *   @JoinColumn(name="bundle_voice_id", referencedColumnName="bundle_id")
     * })
     */
    private $bundleVoicePromos;
    /**
     * @OneToMany(targetEntity="BundlePromo", mappedBy="product", fetch="EAGER", cascade={"persist"})
     * @JoinColumns({
     *   @JoinColumn(name="id", referencedColumnName="product_id"),
     *   @JoinColumn(name="bundle_data_id", referencedColumnName="bundle_id")
     * })
     */
    private $bundleDataPromos;

}

我的映射有什么问题?是否有可能有复合外键,但不是主键?

我曾与Doctrine的一位开发人员交谈过,他说@OneToMany关系中的@JoinColumns字段被忽略了。另一种选择是只有一个外键,并在实体方法中使用匹配标准,根据另一个键过滤所需的条目。另一个解决方案是使用特定于获取这些值的存储库方法。

此外,在onetmany关系中,急切抓取不起作用,所以它对所有子节点进行单独查询。因此,如果你有一个产品有多个价格,当获取一个产品时,它会为获取价格做单独的查询。