2014-11-04 70 views
0

這個作品非常好:遞增與updateAll()列值的價值

$test = self::updateAll(
         array('left_nr' => '3', 
           'right_nr' => '3',), 
         'left_nr>=:left_nr AND right_nr>=:right_nr', 
         array(
          ':left_nr' => $parent->left_nr, 
          ':right_nr' => $parent->right_nr, 
          //':new_left_nr' => 'left_nr + 2', 
          //':new_right_nr' => 'right_nr + 2' 

         ) 
        ); 

,但我要的是:

$test = self::updateAll(
         array('left_nr' => ':new_left_nr', 
           'right_nr' => ':new_right_nr',), 
         'left_nr>=:left_nr AND right_nr>=:right_nr', 
         array(
          ':left_nr' => $parent->left_nr, 
          ':right_nr' => $parent->right_nr, 
          ':new_left_nr' => 'left_nr + 2', 
          ':new_right_nr' => 'right_nr + 2' 

         ) 
        ); 

當我嘗試代碼,我得到以下錯誤:

CDbCommand無法執行SQL語句:SQLSTATE [HY093]:無效的參數編號:綁定變量的數量與令牌數量不匹配。執行的SQL語句是:UPDATE test_nested_set SET left_nr =:YP0,right_nr =:YP1 WHERE left_nr> =:left_nr和right_nr> =:right_nr

我怎樣才能實現呢?

回答

1

你的代碼是錯誤的,可以實現的東西這個目標就像updateCounters()象下面這樣:

$test = self::model()->updateCounters(
    array(
    'left_nr'=>2, //this is equal to => left_nr = left_nr+2 
    'right_nr'=>2 
    ), 
'left_nr>=:left_nr AND right_nr>=:right_nr',array(
    ":left_nr"=>$parent->left_nr, 
    ":right_nr"=>$parent->right_nr, 
    ) 
); 

Yii的定義UpdateCounters()

Updates one or several counter columns. Note, this updates all rows of data unless a condition or criteria is specified.

1

您也可以嘗試這樣

用戶:: model() - > updateAll(array('field_name'=> new CDbExpression('field_name + 1')),「u_id = 10」);

0

在Yii2

廣場這對控制器的頂部:

use yii\db\Expression; 

在你的行動,你可以作如下更新計算列:

Testlog::updateAll(['duration' => new Expression('duration + (5*60)')], 
        ['testlogid' => $tid]); 

以上產生下面的SQL聲明:

UPDATE `testlog` SET `duration`=duration + (5*60) WHERE `testlogid`='15'