在Doctrine2中使用类似的东西:
$user = array('username' => 'example', 'passsword' => 'changeme');
$conn->insert('users', $user);
如何获取刚插入的用户的最后一个ID?如果无法做到这一点,那么你如何生成一个id,以便你能够做到以下几点:
$id = //something here.
$user = array('username' => 'example', 'passsword' => 'changeme', 'id' => $id);
$conn->insert('users', $user);
答案 0 :(得分:112)
如果您使用的是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
答案 1 :(得分:5)
可以使用Doctrine\DBAL\Connection::lastInsertId()
方法。
它可以与本机查询以及手动编写的插入一起使用。
示例案例:
$query = 'INSERT INTO blabla...';
$connection->executeUpdate($query, $params);
var_dump($connection->lastInsertId());
如果使用ORM,您可以从实体管理器获取连接实例:
$connection = $em->getConnection();
注意:
除了技术细节,我同意@Layke为您的具体案例使用实体。
答案 2 :(得分:1)
提供您尝试设置的实体
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
private $id;
然后,当您持久保存对象时,实体管理器将填充您尝试使用ID保留的实体。
然而,有些警告显示,你无法使用复合键明显地执行此操作,并且您显然必须刷新所有实体。因此,如果您将与您正在尝试获取ID的持久实体关联的实体分离,则您将无法检索该ID。
除此之外,Flask的答案还在继续。
$em->persist($object);
$em->flush();
$object->getId();
答案 3 :(得分:0)
$conn->lastInsertId();
将为您提供最后插入的ID。