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。