更新时,Doctrine 2会获得匹配的行数而不是受影响的行数

时间:2012-06-27 15:39:55

标签: php mysql symfony doctrine-orm

我有这样的代码:

    $updateSQL = "UPDATE `Rooms` R SET R.Revenue = {$s['Revenue']}, R.Ave_rent = {$s['Ave_Rent']}
                  WHERE R.Facility_ID={$s['Facility_ID']} AND R.Cur_Year={$s['Year']} AND R.Cur_Month={$s['Month']}";

    $affectedRows = $this->em->getConnection()->executeUpdate($updateSQL);
    if($affectedRows > 0) { ... }

一切正常。我需要知道与我的条件匹配多少行的唯一问题R.Facility_ID={$s['Facility_ID']} AND R.Cur_Year={$s['Year']} AND R.Cur_Month={$s['Month']}如果他们受到影响或不受影响我不想再使用一个选择。

也许有一些设置让mysql计算受影响的行,即使它是相同的?

3 个答案:

答案 0 :(得分:2)

MySQL本身返回受影响的行数,而不是匹配的行数,请参阅the manual

如果Doctrine会在这里做你想做的事,那就必须执行另一个查询。如果你真的需要这个,你必须自己做。

编辑:稍后在文档中读一句话,我看到mysql_info(PHP中的mysqli_info)会返回此信息。

答案 1 :(得分:0)

不确定这个:逻辑是通过SQL但是......

SELECT COUNT(R.Facility_ID), R.Cur_Year, r.Cur_Month from Rooms R
inner join
ON R.Facility_ID={$s['Facility_ID']} AND R.Cur_Year={$s['Year']} AND R.Cur_Month={$s['Month']};

甚至是这样的事情到你的php:

$aff_rows = 0;

foreach($sql as $current_sql)
{
 $updateResult = mysqli_query($link, $current_sql); 
 $aff_rows = $aff_rows + mysqli_affected_rows($link);
}

答案 2 :(得分:0)

Yo可以向数据库添加另一个字段,例如时间戳,并在更新语句中将其设置为NOW(),这样就会影响所有匹配的行。