Symfony2 MappedSuperClass和doctrine:generate:entities [英] Symfony2 MappedSuperClass and doctrine:generate:entities
问题描述
我有一个Offer类(MapperSuperclass)和另外两个类扩展它,PrivateOffer和PublicOffer。
I have a "Offer" class (MapperSuperclass) and 2 more classes extending it, "PrivateOffer" and "PublicOffer".
我遇到的问题是我运行doctrine:generate:entities命令,两个类PrivateOffer和PublicOffer都是完全填充与MappedSuperclassOffer类相同的属性,也是getter和setter方法。
The problem I have is, when I run "doctrine:generate:entities" command, both classes "PrivateOffer" and "PublicOffer" are fullfilled with the same properties than the MappedSuperclass "Offer" class, and also it's getter and setter methods.
如果我删除它们并且只在优惠类中生活,那么doctrine:schema:update的效果很好,但是我需要再次运行doctrine:generate:entities每次我的扩展类都会废弃。
If I remove them and live them only in the "Offer" class, the "doctrine:schema:update" works well as expected, but I need to run the "doctrine:generate:entities" again so, it ruins everytime my extended classes.
为什么在这两个类中复制所有属性和setter / getter方法的doctrine:generate:entities扩展了MappedSupperclass?
Why is the "doctrine:generate:entities" duplicating all the properties and setter/getter methods in both of the classes, if they extends the MappedSupperclass?
谢谢大家:)
OfferClass:
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...
}
PrivateOfferClass
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;
}
}
PublicOfferClass:
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;
}
}
推荐答案
在Doctrine中是一个已知的行为(不是说:错误):在你的场景中,所有的实体属性必须是 private 。只能通过吸嘴来访问它们。
This is a known behaviour (not to say: bug) in Doctrine: In your scenario, all entity properties must be private. Accessing them must only be possible via the getters.
这篇关于Symfony2 MappedSuperClass和doctrine:generate:entities的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!