symfony4 / doctrine有oracle oci8 db的问题

问题描述 投票:0回答:1

在使用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值是正确的。

oracle symfony doctrine
1个回答
0
投票

$file是您发送到数据库的对象。在您的课堂上,我想像您在File课堂中有这样的事情:

/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

因此,目标文件未设置Id(因为它不是构造函数的一部分)。将其刷新到数据库时设置。如果您想在逻辑中重新获得此ID,则需要使用类似以下内容的方法从数据库中检索文件:

$this
    ->getEntityManager()
    ->getRepository(File::class)
    ->findOneByFileName($file->getFileName());
© www.soinside.com 2019 - 2024. All rights reserved.