Symfony2 MappedSuperClass和doctrine:generate:entities

Lui*_*ral 5 doctrine mappedsuperclass symfony

我有一个"Offer"类(MapperSuperclass)和另外两个扩展它的类,"PrivateOffer"和"PublicOffer".

我遇到的问题是,当我运行"doctrine:generate:entities"命令时,"PrivateOffer"和"PublicOffer"这两个类都填充了与MappedSuperclass"Offer"类相同的属性,以及它的getter和setter方法.

如果我删除它们并仅在"Offer"类中使用它们,那么"doctrine:schema:update"可以正常工作,但是我需要再次运行"doctrine:generate:entities",因此每次扩展类都会丢失它.

为什么"doctrine:generate:entities"会复制两个类中的所有属性和setter/getter方法,如果它们扩展了MappedSupperclass?

谢谢你们 :)

OfferClass:

namespace Pro\JobBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
/**
 * Offer
 *
 * @ORM\MappedSuperclass()
 */
class Offer
{
    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    protected $name;

    ....more properties...
}
Run Code Online (Sandbox Code Playgroud)

PrivateOfferClass:

<?php

namespace Pro\JobBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * PrivateOffer
 *
 * @ORM\Table(name="private_offer")
 * @ORM\Entity
 */
class PrivateOffer extends Offer
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}
Run Code Online (Sandbox Code Playgroud)

PublicOfferClass:

<?php

namespace Pro\JobBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * PublicOffer
 *
 * @ORM\Table(name="public_offer")
 * @ORM\Entity
 */
class PublicOffer extends Offer
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}
Run Code Online (Sandbox Code Playgroud)

lxg*_*lxg 12

这是Doctrine中已知的行为(不是说:bug):在您的场景中,所有实体属性都必须是私有的.只能通过getter访问它们.