Doctrine : `execute` 方法是只执行它的特定请求还是刷新队列中的所有语句

Posted

技术标签:

【中文标题】Doctrine : `execute` 方法是只执行它的特定请求还是刷新队列中的所有语句【英文标题】:Doctrine : does `execute` method execute only its specific request or it flushs all statements in the queue 【发布时间】:2020-06-05 09:23:43 【问题描述】:

如果execute 方法只执行其特定请求,或者它是否像flush 那样刷新队列中的所有语句,我在 Doctrine 文档中找不到。

考虑这样的代码:

...
$this->getEntityManager()->persist($cache);
...
$this->getEntityManager()
    ->createQuery('DELETE ReportBundle:Report r WHERE r.id = :id')
    ->setParameter('id', 1)
    ->execute();

由于此时没有flush方法,在调用execute时是否会创建$cache实体?

Doctrine 文档链接将不胜感激。

【问题讨论】:

【参考方案1】:

cache 实体不会创建,因为executeQuery 的方法,它只适用于您创建的Query。当EntityManagerUnitOfWork 一起使用时。

【讨论】:

我做了一些测试,你说得对:实体没有持久化。

以上是关于Doctrine : `execute` 方法是只执行它的特定请求还是刷新队列中的所有语句的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 / Doctrine 使 $statement->execute() 不“缓冲”所有值

Doctrine DBAL ->execute() 和 Hydration,DB2 字段名称包括“#”

Doctrine2 - 继承映射,查询子类

Doctrine2的学习

如何在doctrine zend框架中的flush之前插入行之后返回多个id

教义:延迟加载属性