教义查询:带限制删除

Posted

技术标签:

【中文标题】教义查询:带限制删除【英文标题】:Doctrine query: delete with limit 【发布时间】:2014-10-08 02:41:20 【问题描述】:

我正在尝试使用 Doctrine 中的删除查询仅删除 x 个对象。而且由于学说中没有 LIMIT,我们应该使用 $query->setMaxResults($limit) 来代替。我正在使用 Symfony2。

但是它不适用于以下查询(无论有没有 $query->setMaxResults($limit),它都会删除所有内容,而不是删除 $limit 第一个实体)。

$limit = 10;
$query = $entityManager->createQuery(
        'DELETE FROM MyProject\Bundle\MyBundle\Entity\MyEntity myEntity
         WHERE myEntity.cost = 50'
    )
$query->setMaxResults($limit);
$query->execute();

【问题讨论】:

【参考方案1】:

一个可行的解决方案是使用原生 SQL 和 Doctrine 像这样(而不是 DQL)。

$limit = 10;
$sql    = 'DELETE FROM my_entity
           WHERE cost = 50
           LIMIT ' . $numberOfDeletion;
$stmt = $entityManager->getConnection()->prepare($sql);
$stmt->execute();

【讨论】:

【参考方案2】:

setMaxResults 仅在某些情况下有效。如果没有管理,教义似乎会忽略它。

查看 Doctrine 文档:https://www.doctrine-project.org/projects/doctrine1/en/latest/manual/dql-doctrine-query-language.html#driver-portability

如果它不起作用,请尝试使用本机 SQL,就像发布的其他解决方案一样。

【讨论】:

以上是关于教义查询:带限制删除的主要内容,如果未能解决你的问题,请参考以下文章

如何编写此子查询在Codeigniter中选择带限制的AVG

限制删除订单数量 SQL Query

MongoDB 索引限制

教义2多对多带翻译

如何限制Hybris中的插入?

sql 查询 一个表中某几列数据