教义查询:带限制删除
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,就像发布的其他解决方案一样。
【讨论】:
以上是关于教义查询:带限制删除的主要内容,如果未能解决你的问题,请参考以下文章