这非常有效:
$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 AND right_nr> =:right_nr
我怎样才能实现它?
答案 0 :(得分:1)
您的代码错误,您可以使用updateCounters()
之类的内容实现此目标,如下所示:
<?php
$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()
:
更新一个或多个计数器列。请注意,除非指定了条件或条件,否则会更新所有数据行。
答案 1 :(得分:1)
您也可以尝试这样
User::model()->updateAll(array(
'field_name'=> new CDbExpression('field_name + 1')),
"u_id = 10"
);
答案 2 :(得分: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'