我有 onFlush 事件的监听器。
public function onFlush(OnFlushEventArgs $args) {
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
foreach ($uow->getScheduledEntityInsertions() as $entity) {
$id = ...
}
}
我想获得$实体的ID。如果我调用getId()然后返回null。有没有办法在这个监听器内完成刷新并得到$ entity的Id?
谢谢你提前
答案 0 :(得分:0)
不可能在执行SQL INSERT命令之前访问ID,但是您可以通过以下一些棘手的方式访问MySQL表的自动增量值:
$classMeta = $em->getClassMetadata($className);
if ($classMeta->rootEntityName !== $className) {
// if the Entity is inherited, only root entity table may have auto increment ID
$classMeta = $em->getClassMetadata($classMeta->rootEntityName);
}
$tableName = $classMeta->getTableName();
$conn = $em->getConnection();
$stmt = $conn->prepare("SHOW TABLE STATUS LIKE '".$tableName."'");
$stmt->execute();
$result = $stmt->fetch(\PDO::FETCH_ASSOC);
$id = $result['Auto_increment'];
请注意使用以下方法: