在 Doctrine 2 中查找或创建(更新插入)功能

Posted

技术标签:

【中文标题】在 Doctrine 2 中查找或创建(更新插入)功能【英文标题】:Find or create (upsert) functionality in Doctrine 2 【发布时间】:2012-10-15 15:17:15 【问题描述】:

Doctrine 2 是否内置了 upsert 功能?似乎没有,但我无法找到明确的“是”或“否”答案。

如果是这样,我当然有兴趣查看示例和/或一些文档。

【问题讨论】:

这似乎是一个重复的问题。 ***.com/q/1132571/1644036 【参考方案1】:

我相信我找到了答案。截至今天(2012 年 10 月 15 日),Doctrine 有一个未解决的“add upsert support”问题。我认为如果 Doctrine 2 确实有 upsert 支持,这张票不会仍然开放,所以我想这是我的明确答案。

【讨论】:

我可以看到有一张票,但找不到任何文件?你有吗?【参考方案2】:

Upsert 已经存在于 Doctrine 中。

使用查询生成器,如果要返回文档,则必须设置 findAndUpdate()returnNew()。设置 upsert() 就可以开始了。

例如:

$documentMannager->createQueryBuilder('App\Domain')
->findAndUpdate()
->returnNew()
->field('_id')->equals($id)
->field('page')->equals($page)
->field('count')->inc(1)
->upsert()
->getQuery()
->execute();

这是我实现桶模式的方式。

【讨论】:

谢谢@Guilherme,我会测试这种方法,并将结果返回给您! 仅适用于 ODM,不适用于 ORM。 正如@Im0rtality 所说,它只能在 Mongo 的上下文中使用,而不能在 SQL 数据库中使用。

以上是关于在 Doctrine 2 中查找或创建(更新插入)功能的主要内容,如果未能解决你的问题,请参考以下文章

如何查找在 SQL Server 表中插入或更新行的时间

如何使用 Doctrine QueryBuilder 或 EntityManager 通过多对多相关实体查找实体

Symfony 4 / doctrine插入初始数据库数据

使用Hibernate基于唯一键查找或插入

Doctrine 2 - 如何在 PostPersist 中获取最后插入的 id 的 ID?

Doctrine2 - 一次多次插入