如何在Doctrine 2中设置固定实体关系

时间:2012-12-02 11:55:27

标签: php symfony doctrine-orm

我有抽象实体(App-base core):

namespace App\Bundles\AppBundle\Entity;

abstract class App extends ContainerAware implements AppInterface
{
// .....
}

和自我实体:

namespace AppRus\Bundles\AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM,
    App\Bundles\AppBundle\Entity\App as BaseApp;

/**
 * App
 *
 * @ORM\Table(name="apps")
 * @ORM\Entity(repositoryClass="AppRus\Bundles\AppBundle\Entity\AppRepository")
 */
class App extends BaseApp
{
  // ....
}

和控制修订的实体:

namespace App\Bundles\AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * AppHistory
 *
 * @ORM\Table(name="apps_history")
 * @ORM\Entity(repositoryClass="App\Bundles\AppBundle\Entity\AppHistoryRepository")
 */
class AppHistory
{
    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="App\Bundles\AppBundle\Entity\App")
     * @ORM\JoinColumn(name="app_apple_id", referencedColumnName="apple_id")
     */
    private $app;
}

我无法为App#apple_id

创建关系AppHistory#app

当我将实体设置为抽象类App时,则doctrine创建一个新表“App” 当我将MappedSuperClass设置为抽象类App时,我有错误:http://docs.doctrine-project.org/en/latest/reference/inheritance-mapping.html#mapped-superclasses

如何创建从AppHistory到抽象核心App的关系?

1 个答案:

答案 0 :(得分:0)

我的理解是,这是不可能的。我认为你的做法是错误的,至少对于Doctrine2来说。

首先,您从Doctrine2文档中提到:

  

映射的超类是一个抽象或具体的类,它为其子类提供持久的实体状态和映射信息,但它本身并不是一个实体。

您无法与不是实体的事物建立关系!

要解决您的直接问题(〜版本控制〜在学说中),请查看EntityAudit on Github