当从存储库中获取时,Doctrine如何在不调用__construct方法的情况下创建实体?

Vic*_*sky 5 php entity fetch symfony doctrine-orm

我在构造函数中编写了下一个代码:

public function __construct()
{
    die('creating entity');
}
Run Code Online (Sandbox Code Playgroud)

当我用new运算符创建实体实例时:

$entity = new Entity();
Run Code Online (Sandbox Code Playgroud)

我看到了creating entity文字.

但是当我从回购获得实体时:

$em->getRepository('AcmeDemoBundle:Entity')->find(1)
Run Code Online (Sandbox Code Playgroud)

Doctrine创建一个实体对象而不调用__construct()方法,我看不到creating entity文本.

任何人都可以解释Doctrine在从存储库加载对象时如何创建对象?

Vic*_*sky 6

在不调用ReflectionClass :: newInstanceWithoutConstructor可用的构造函数的情况下创建实例

Doctrine创建映射实体的实例,而不调用Doctrine\ORM\Mapping\ClassMetadataInfo :: newInstance()中的构造函数

  • @PawełBrzoski我认为因为实体已经创建并位于数据库中.因此无需再次创建它们,只需要轻轻加载它们.对于Doctrine,使用构造函数创建新实体意味着它是一个新实体,不存在于数据库中,但必须保留在其中. (2认同)