有没有办法在 TypeORM 中访问 `last_inserted_id`?

drl*_*lff 6 node.js express typeorm

具体来说,有没有办法在 TypeORM 事务中访问 last_inserted_id?IE:

 try {
        // transaction
        await getManager().transaction(async (trManager): Promise<any> => {

            const company = new Company();
            const savedCompany = await trManager.save(company);
            const companyId = savedCompany.lastInsertedId;

            // ..............more saves..............//

            // await trManager.save(otherEntityUsingCompanyId);

        });
    } catch (err) {
        console.error("err: ", err);         
    }
Run Code Online (Sandbox Code Playgroud)

我已经彻底浏览了文档(诚然,如果我错过了一些东西,可能还不够彻底)并且没有看到任何东西。我发现看起来相似的最接近的文档是:

const userId = manager.getId(user); // userId === 1
Run Code Online (Sandbox Code Playgroud)

这似乎是一个足够常见的用例,我假设我错过了一些东西,这就是为什么我犹豫要提出问题。任何帮助,将不胜感激。谢谢!

drl*_*lff 8

注意:请注意,大约从最初的答案开始,我就没有使用过 TypeORM,所以现在可能有更好的方法来做到这一点。

Figured it out. Use returning method...

const inserts = await getConnection()
            .createQueryBuilder()
            .insert()
            .into(Company)
            .values([
                { Name: "abcdef", Address: "456 denny lane" }, 
                { Name: "ghijkil", Address: "899 ihop lane" }
            ])
            .returning("INSERTED.*")
            .printSql()
            .execute();

// `inserts` holds array of inserted objects
Run Code Online (Sandbox Code Playgroud)