【发布时间】:2016-09-23 15:17:23
【问题描述】:
使用 ORM
$timer = new Timer(); //an object marked as a Doctrine Entity
$this->em->persist($timer);
print $timer->getId(); //blank - not yet set
$this->em->flush($timer);
print $timer->getId(); //prints ID of newly inserted record
实际的 ORM 代码(学说)
public function persist($entity)
{
if ( ! is_object($entity)) {
throw ORMInvalidArgumentException::invalidObject('EntityManager#persist()' , $entity);
}
$this->errorIfClosed();
$this->unitOfWork->persist($entity);
}
问题
当上面的 ORM 代码没有“按引用传递”指令时,Doctrine 如何将insert_id 插入到Entity 中?
即通常我会期待这样的事情:
public function persist(&$entity)
{
...
}
表示将在persist 过程中修改实体(使用insert_id)。但没有任何东西。然而,Entity 神奇地填充了insert_id。
这究竟是怎么发生的?
【问题讨论】:
标签: php doctrine-orm doctrine persist last-insert-id