在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);
如果您正在使用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,您可以从实体管理器获得连接的实例:
$connection = $em->getConnection();
注意:
除了技术细节,我同意@Layke在你的具体情况下使用实体。
$conn->lastInsertId();
将获得您仅使用Doctrine的DBAL (sans ORM)时最后插入的ID。
如果你要设置的实体有
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
private $id;
当你持久化你的对象时,实体管理器将用ID填充你试图持久化的实体。
然而,一些警告是,你不能用复合键post显然做到这一点,你显然必须冲洗所有实体。因此,如果您分离一个与您试图获取ID的持久实体有关联的实体,那么您将无法检索ID。
除此之外,弗拉斯克的回答非常正确。
$em->persist($object);
$em->flush();
$object->getId();