4

我遇到了一个我试图理解但徒劳无功的小问题……我有 2 节课。一个是称为“SpecificIndividual”的抽象文档,另一个是称为“Individual”的常规文档。

这就是我想要做的:SpecificIndividual 有一些属性和一些 getter/setter 方法。Individual 继承 SpecificIndividual 并拥有自己的属性和 getters/setters 方法。

我使用具有 COLLECTION_PER_CLASS 类型的 MappedSuperClass 继承。

我的问题是,当我使用“doctrine:mongodb:generate:documents”命令时,它会为抽象类生成所有 getters/setters 方法(这是我想要的),为子类生成所有 getters/setters 方法(这也是我想要什么)但是它将所有抽象类的getter/setter方法复制到子类中(这在继承中根本没有意义)。

我可能做错了什么,因为它在我使用 MySQL 和实体时有效,但是自从我搬到 MongoDB 之后,我找不到正确的方法来做到这一点。

这是我的课程:首先,SpecificIndividual

namespace SpecificBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * SpecificIndividual
 *
 * @MongoDB\Document
 * @MongoDB\InheritanceType("COLLECTION_PER_CLASS")
 */
abstract class Individual
{
    /**
     * @MongoDB\Id
     */
    protected $individual_id;

    /**
     * @MongoDB\Boolean
     */
    protected $chiped;

    /**
     * Get individualId
     *
     * @return id $individualId
     */
    public function getIndividualId()
    {
        return $this->individual_id;
    }

    /**
     * Set chiped
     *
     * @param boolean $chiped
     * @return self
     */
    public function setChiped($chiped)
    {
        $this->chiped = $chiped;
        return $this;
    }

    /**
     * Get chiped
     *
     * @return boolean $chiped
     */
    public function getChiped()
    {
        return $this->chiped;
    }
}

和子类 Individual :

namespace ChildBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

use SpecificBundle\Document\Individual as SpecificIndividual;

/**
 * Individual
 *
 * @MongoDB\Document(collection="individuals")
 */
class Individual extends SpecificIndividual
{
    /**
     * @MongoDB\String
     */
    protected $someString;

    /**
     * Constructor
     */
    public function __construct()
    {
        parent::__construct();
    }


    /**
     * Set someString
     *
     * @param String $someString
     * @return self
     */
    public function setSomeString(String $someString)
    {
        $this->someString = $someString;
        return $this;
    }

    /**
     * Get someString
     *
     * @return String $someString
     */
    public function getSomeString()
    {
        return $this->someString;
    }
}

我指望你们所有人提供帮助!提前致谢。

4

1 回答 1

2

您应该将“@MongoDB\MappedSuperclass”添加到抽象类的注释中

链接做文档http://doctrine-orm.readthedocs.org/projects/doctrine-mongodb-odm/en/latest/reference/inheritance-mapping.html

您的代码示例

namespace SpecificBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * SpecificIndividual
 * 
 * @MongoDB\MappedSuperclass
 * @MongoDB\Document
 * @MongoDB\InheritanceType("COLLECTION_PER_CLASS")
 */
abstract class Individual
{
于 2015-11-06T14:12:32.227 回答