在Doctrine入门教程中,有一个bug创建示例。错误具有实体用户的记者和工程师属性。
该示例让您传递现有记者和现有工程师的ID。然后,该示例使用id在数据库中查找用户。
$reporter = $entityManager->find("User", $theReporterId);
$engineer = $entityManager->find("User", $theDefaultEngineerId);
后来,记者和工程师都附在了虫子身上。
$bug->setReporter($reporter);
$bug->setEngineer($engineer);
由于我知道id,我认为我会聪明并创建一个新用户,将id设置为传递的变量并对用户调用persist。
$reporter = new User();
$reporter->setId($theReporterId);
$reporter->setName("Foo");
$entityManager->persist($reporter);
然后我继续使用新的User对象调用setReporter / Engineer,在bug上调用persist,然后调用flush。
然而,当发生这种情况时,会为记者和工程师创建一个新用户,并且数据库中的错误条目将设置为新用户的新ID。
看起来Doctrine并不知道新用户是基于现有实体的。有没有办法可以做我想做的事情?我认为这是绕过命中数据库以获取用户的好方法。