Наследование доктрины Symfony2 MongoDB

Я пришел с небольшой проблемой, которую я пытался понять напрасно... У меня 2 класса. Один из них представляет собой абстрактный документ под названием «SpecificIndividual», а другой — обычный документ под названием «Individual».

Это то, что я хочу сделать: SpecificIndividual имеет некоторые свойства и некоторые методы получения/установки. Индивидуальный наследует SpecificIndividual и имеет свои собственные свойства и методы получения/установки.

Я использовал наследование MappedSuperClass с типом COLLECTION_PER_CLASS.

Моя проблема в том, что когда я использую команду «doctrine:mongodb:generate:documents», она генерирует все методы получения/установки для абстрактного класса (это то, что я хочу), все методы получения/установки для дочернего класса (это также то, что я хочу), НО он дублирует все методы получения/установки абстрактного класса в дочерний класс (это не имеет никакого смысла в наследовании).

Я, вероятно, делаю что-то не так, так как это работало, когда я использовал MySQL и Entities, но с тех пор, как я перешел на 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;
    }
}

Я рассчитываю на всех вас, ребята, на помощь! Заранее спасибо.


person Keano    schedule 29.05.2014    source источник


Ответы (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
{
person Evgeniy Kuzmin    schedule 06.11.2015
comment
Вот и все, я нашел его на той же неделе, но все равно большое спасибо за вашу помощь :) - person Keano; 18.12.2015