8

Yiiある条件に基づいて1つのテーブルを更新する必要があるという要件が1つあります。そして、列を。で更新する必要がありますnew_val = previous_value + new_val。しかし、コードは期待どおりに機能していません。

私が試したコードは

$update = Yii::app()->db->createCommand()
->update('tbl_post', array('star'=>('star' + 1),'total'=>('total' + $ratingAjax)),
'id=:id',array(':id'=>$post_id));

通常のクエリでは、クエリは次のようになります

UPDATE tbl_post set star= star + 1,total = total + '$ratingAjax' where id = 1

誰が間違いがどこにあるか知っていますか?

4

3 に答える 3

20

次のことを試してください。

$update = Yii::app()->db->createCommand()
    ->update('tbl_post', 
        array(
            'star'=>new CDbExpression('star + 1'),
            'total'=>new CDbExpression('total + :ratingAjax', array(':ratingAjax'=>$ratingAjax))
        ),
        'id=:id',
        array(':id'=>$post_id)
    );

を使用CDbExpressionすると、列の値を更新するための式を送信できます。

参照:http ://www.yiiframework.com/doc/api/1.1/CDbCommand#update-detail

および:http: //www.yiiframework.com/doc/api/1.1/CDbExpression# __construct-detail

于 2013-03-27T00:34:30.473 に答える
3

文字列を操作するには、これを試してください:

$update = Yii::app()->db->createCommand()
->update('tbl_post', array('star'=>'star + 1','total'=> 'total + '.$ratingAjax),
'id=:id',array(':id'=>$post_id));
于 2013-03-26T16:13:38.690 に答える
1

これでうまくいくはずです:

   Post::model()->updateCounters(
        array('star'=>1),
        array('total'=>$ratingAjax),
        array('condition' => "id = :id"),
        array(':id' => $post_id),
    );

値を設定するのではなく、増分します

于 2015-02-04T10:41:21.380 に答える