在使用doctrine / oracle / oci8驱动程序将新记录插入Symfony 4中的数据库时出现问题。我的实体配置与序列ID生成:
<id name="id" type="integer" column="ID">
<generator strategy="SEQUENCE"/>
<sequence-generator sequence-name="FILES_SEQ" allocation-size="10" initial-value="1"/>
</id>
这就是我将新记录插入数据库的方式:
$file = new File();
$file->setFileName($fileParams['fileName']);
...
$this->getEntityManager()->persist($file);
$this->getEntityManager()->flush();
记录已成功持久保存,但问题是当我尝试通过以下方式获取最后的插入ID时:
$file->getId();
然后返回的ID比数据库中的ID少1。这是某种缓存问题吗?我尝试使用getEntityManager()-> refresh($ file),但是它不起作用。同样,当我调用findAll()方法时,那里的ID值是正确的。
$file
是您发送到数据库的对象。在您的课堂上,我想像您在File
课堂中有这样的事情:
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
因此,目标文件未设置Id
(因为它不是构造函数的一部分)。将其刷新到数据库时设置。如果您想在逻辑中重新获得此ID,则需要使用类似以下内容的方法从数据库中检索文件:
$this
->getEntityManager()
->getRepository(File::class)
->findOneByFileName($file->getFileName());