Symfony2中的继承

时间:2015-05-01 16:38:31

标签: symfony inheritance doctrine

我已经有了一个图表类,其中我有ClassA(superClass)和两个继承自ClassB的{​​{1}}和ClassC类。 如何使用Doctrine在Symfony2中对它们进行编码?

注意:当我使用经典方法(我的意思是ClassA)生成实体时,我的数据库中有三个表。

1 个答案:

答案 0 :(得分:0)

如果要对3个类使用单个表,则应使用DiscriminatorMap

示例:我们有一个产品类,以及从产品继承的两个子类Coupon和CustomProduct

/**
 * MyApp\ProductBundle\Entity\Product
 *
 * @ORM\Table(name="product")
 * @ORM\Entity(repositoryClass="MyApp\ProductBundle\Repository\ProductRepository")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="productType", type="string")
 * @ORM\DiscriminatorMap({
 *   "Product" = "Product",
 *   "Coupon" = "MyApp\CouponBundle\Entity\Coupon",
 *   "CustomProduct" = "MyApp\CustomProductBundle\Entity\CustomProduct",
 * })
 */
class Product implements PriceInterface
{
...
}

MyApp的\ CouponBundle \实体\优惠券

/**
 * @ORM\Entity
 */
class Coupon extends Product implements ProductInterface
{
}

MyApp的\ CusomProductBundle \实体\ CustomProduct

/**
 * @ORM\Entity
 */
class CustomProduct extends Product implements ProductInterface
{
}

允许对所有3个类使用公共表“product”,提交的“productType”将具有存储记录的类名。更多信息http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

有关2个表的问题的更新:

您可以为继承的类指定单独的表:

MyApp的\ CouponBundle \实体\优惠券

/**
 * @ORM\Table(name="coupon")
 * @ORM\Entity
 */
class Coupon extends Product implements ProductInterface
{
}

MyApp的\ CusomProductBundle \实体\ CustomProduct

/**
 * @ORM\Table(name="custom_product")
 * @ORM\Entity
 */
class CustomProduct extends Product implements ProductInterface
{
}