Doctrine2插入并检索新的插入ID


Doctrine2 Insert and retrieve new insert ID

在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();