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。