Php 亚类学说2实体

Php 亚类学说2实体,php,symfony,doctrine-orm,doctrine,subclass,Php,Symfony,Doctrine Orm,Doctrine,Subclass,我试图将一个条令2实体子类化,以添加一组我想使用的“助手”函数 例如,这是我的实体: namespace Project\Entity; class Product { private $name; private $idProductCategory; } 映射是通过XML文件完成的 然后,我尝试扩展它: namespace Project\Entity; class ProductJSON extends Product { public function toJS

我试图将一个条令2实体子类化,以添加一组我想使用的“助手”函数

例如,这是我的实体:

namespace Project\Entity;
class Product
{
    private $name;
    private $idProductCategory;
}
映射是通过XML文件完成的

然后,我尝试扩展它:

namespace Project\Entity;
class ProductJSON extends Product {
    public function toJSON() {
        /* ... */
    }
}
当我试图在教义中使用此对象时:

$a = $entityManager->getRepository('\Project\Entity\ProductJSON');
我得到“找不到名为Project.Entity.ProductJSON.dcm.xml的映射文件”错误。 这是完全正确的,因为我不需要任何额外的映射

我已经广泛阅读了Doctrine文档和关于Mapped Super Class()的内容,但据我所知,这是为了扩展DB意义上的实体

我不关心数据库/映射,我只想在PHP方面扩展实体,以便在我的应用程序中使用对象seamlessy


如何实现这个目标?

您不需要子类来添加其他方法。只需将这些方法添加到您的实体类中,因为没有任何映射信息附加到它们,所以条令只会忽略它们

例如


但如果我迁移并重新生成实体呢?我会丢失我所做的所有更改,对吗?你说的“迁移并重新生成”是什么意思?通常情况下,Doctrine会从实体类代码生成DB模式,而不是相反,但可能我误解了你的问题。如上所述,我使用XML作为模式或“数据映射”,因此如果我更改该模式,请将DB迁移到该模式并重新生成实体(
原则:映射:转换注释/path to src
原则:生成:实体
)我会失去我所做的…只是你的例子错了还是你真的错过了
扩展产品
语句?只是缺少在例子中。编辑谢谢。
class Product
{
    private $name;
    private $idProductCategory;

    /* ... */

    public function toJSON() {
        /* ... */
    }
}