【问题标题】: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();

【问题讨论】:

    标签: symfony doctrine-orm doctrine dql doctrine-query


    【解决方案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,就像发布的其他解决方案一样。

      【讨论】:

        猜你喜欢
        • 2015-10-13
        • 2012-12-23
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多