4

I come with a little problem that I tried to understand in vain... I have 2 classes. One is an abstract Document called "SpecificIndividual" and the other one is a regular Document called "Individual".

This is what I want to do : SpecificIndividual has some properties and some getters/setters methods. Individual inherits SpecificIndividual and has its own properties and getters/setters methods.

I used MappedSuperClass inheritance with COLLECTION_PER_CLASS type.

My problem is that when I use "doctrine:mongodb:generate:documents" command, it generates all getters/setters methods for the abstract class (this is what I want), all getters/setters methods for the child class (this is also what I want) BUT it duplicates all of the abstract class getters/setters methods into the child class (this has no sense at all in inheritance).

I'm probably doing something wrong, since it worked when I was using MySQL and Entities, but since I moved to MongoDB, I can't find the proper way to do this.

Here are my classes : First, 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;
    }
}

and the child class 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;
    }
}

I count on you all guys for some help ! Thanks in advance.

1 Answer 1

2

You should add "@MongoDB\MappedSuperclass" to annotation of your abstract class

Link do the documentation http://doctrine-orm.readthedocs.org/projects/doctrine-mongodb-odm/en/latest/reference/inheritance-mapping.html

Your code sample

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
{
Sign up to request clarification or add additional context in comments.

1 Comment

That was it, I found it the same week but thanks a lot for your help anyway :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.