我已经有了一个图表类,其中我有ClassA
(superClass)和两个继承自ClassB
的{{1}}和ClassC
类。 如何使用Doctrine在Symfony2中对它们进行编码?
注意:当我使用经典方法(我的意思是ClassA
)生成实体时,我的数据库中有三个表。
答案 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
{
}