Symfony2 MappedSuperClass和doctrine:generate:entities [英] Symfony2 MappedSuperClass and doctrine:generate:entities

查看:82
本文介绍了Symfony2 MappedSuperClass和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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆