Doctrine 带限制的条令更新查询

Doctrine 带限制的条令更新查询,doctrine,doctrine-orm,doctrine-query,Doctrine,Doctrine Orm,Doctrine Query,我想使用如下限制执行更新查询: UPDATE anytable SET anycolumn = 'anyvalue' WHERE anothercolumn='anothervalue' LIMIT 20 这在条令2.1中是如何实现的?不是条令特定的,但可能在子查询中实现 更新消息集test_read=1 我在哪里 从中选择id 从消息中选择id 按日期订购\u添加说明 限制5,5 tmp ; 不是特定于条令,但可能有子查询 更新消息集test_read=1 我在哪里 从中选择id 从消息中选

我想使用如下限制执行更新查询:

UPDATE anytable SET anycolumn = 'anyvalue' WHERE anothercolumn='anothervalue' LIMIT 20

这在条令2.1中是如何实现的?

不是条令特定的,但可能在子查询中实现

更新消息集test_read=1 我在哪里 从中选择id 从消息中选择id 按日期订购\u添加说明 限制5,5 tmp ;
不是特定于条令,但可能有子查询

更新消息集test_read=1 我在哪里 从中选择id 从消息中选择id 按日期订购\u添加说明 限制5,5 tmp ; 编辑:

您可以通过两种不同的方式进行:

1-直接使用DQL创建查询:

2-使用QueryBuilder创建查询:

您应该做:echo$query->getSQL;检查为这两个对象生成的sql

编辑: 另一个不推荐的替代方法是使用

编辑:

您可以通过两种不同的方式进行:

1-直接使用DQL创建查询:

2-使用QueryBuilder创建查询:

您应该做:echo$query->getSQL;检查为这两个对象生成的sql

编辑:
另一个不推荐的替代方法是使用

我发现我必须从entityManager获取连接并调用executeUpdate:

$em->getConnection()->executeUpdate(
    "UPDATE anytable SET anycolumn = 'anyvalue'
     WHERE anothercolumn='anothervalue'
     LIMIT 20");
报告说:

如果要执行DELETE、UPDATE或INSERT语句,则本机 SQL API无法使用,可能会引发错误。使用 EntityManagergetConnection以访问本机数据库连接 并为这些查询调用executeUpdate方法


我发现我必须从entityManager获取连接并调用executeUpdate:

$em->getConnection()->executeUpdate(
    "UPDATE anytable SET anycolumn = 'anyvalue'
     WHERE anothercolumn='anothervalue'
     LIMIT 20");
报告说:

如果要执行DELETE、UPDATE或INSERT语句,则本机 SQL API无法使用,可能会引发错误。使用 EntityManagergetConnection以访问本机数据库连接 并为这些查询调用executeUpdate方法


不,这没用。我需要一个更新表中多行但不是所有行的查询。所有这些都集中在一个查询中。我不想选择一些,然后逐个更新。@请查看这是否接近您的需要您提供的方法1和方法2不起作用。我在这里发帖之前试过了。你也应该这么做。你对原生SQL的建议很有效。我刚刚尝试过类似的方法,但$query->setMaxResults20;似乎对更新查询不起作用-对Symfony2日志中显示的update语句没有限制。不,这没有帮助。我需要一个更新表中多行但不是所有行的查询。所有这些都集中在一个查询中。我不想选择一些,然后逐个更新。@请查看这是否接近您的需要您提供的方法1和方法2不起作用。我在这里发帖之前试过了。你也应该这么做。你对原生SQL的建议很有效。我刚刚尝试过类似的方法,但$query->setMaxResults20;似乎不适用于更新查询-未对Symfony2日志中显示的update语句进行限制。选择“:错误:未定义类选择”:错误:未定义类
$em->getConnection()->executeUpdate(
    "UPDATE anytable SET anycolumn = 'anyvalue'
     WHERE anothercolumn='anothervalue'
     LIMIT 20");