Doctrine2插入并检索新的插入ID
在Doctrine2中使用一些东西如:
$user = array('username' => 'example', 'passsword' => 'changeme'); $conn->insert('users', $user); 那么我将如何得到刚刚插入的用户的最后一个ID? 如果不能做到这一点,那么你如何创build一个ID,以便你可以做到以下几点:
 $id = //something here. $user = array('username' => 'example', 'passsword' => 'changeme', 'id' => $id); $conn->insert('users', $user); 
	
如果您正在使用ORM
 $em->persist($object); $em->flush(); $object->getId(); 
如果您使用的是DBAL:
 $conn->lastInsertId(); 
http://www.doctrine-project.org/api/dbal/2.5/class-Doctrine.DBAL.Connection.html#_lastInsertId
 可以使用Doctrine\DBAL\Connection::lastInsertId()方法。 
它可以用于原生查询以及手动编写的插入。
示例情况:
 $query = 'INSERT INTO blabla...'; $connection->executeUpdate($query, $params); var_dump($connection->lastInsertId()); 
如果使用ORM,则可以从实体pipe理器获取连接的实例:
 $connection = $em->getConnection(); 
 注意: 
 除了技术细节之外,我同意@Layke为您的具体情况使用实体。 
提供你正在尝试设置的实体
  /** * @Id @Column(type="integer") * @GeneratedValue */ private $id; 
然后,当你坚持你的对象时,实体pipe理器将填充你试图持续使用ID的实体。
但是,有一些注意事项是,你不能用复合键显然这样做,你显然必须刷新所有的实体。 所以如果你分离一个实体,这个实体有一个关联到持久实体,你试图获得ID,那么你将无法检索到ID。
除此之外,Flask的答案是轰动的。
 $em->persist($object); $em->flush(); $object->getId(); 
 $conn->lastInsertId(); 会在只使用Doctrine的DBAL(sans ORM)时获得最后插入的ID。