【问题标题】:Symfony2 MongoDB Doctrine InheritanceSymfony2 MongoDB 学说继承
【发布时间】:2014-05-29 07:41:21
【问题描述】:

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

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

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

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

我可能做错了什么,因为它在我使用 MySQL 和 Entities 时有效,但自从我搬到 MongoDB 后,我找不到正确的方法。

这是我的课程: 首先,特定个体:

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;
    }
}

和子类个人:

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;
    }
}

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

【问题讨论】:

    标签: mongodb symfony inheritance doctrine-orm mappedsuperclass


    【解决方案1】:

    您应该在抽象类的注释中添加“@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
    {
    

    【讨论】:

    • 就是这样,我在同一周找到了它,但还是非常感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多