php - instalar - Actualizar consulta en Yii
yii2 github (3)
Esto debería hacer el trabajo:
Post::model()->updateCounters(
array(''star''=>1),
array(''total''=>$ratingAjax),
array(''condition'' => "id = :id"),
array('':id'' => $post_id),
);
Incrementará, no establecerá los valores
Tengo un requisito en Yii
donde tengo que actualizar una tabla basada en alguna condición. Y tengo que actualizar la columna con new_val = previous_value + new_val
. Pero el código no está funcionando como se esperaba.
El código que probé es
$update = Yii::app()->db->createCommand()
->update(''tbl_post'', array(''star''=>(''star'' + 1),''total''=>(''total'' + $ratingAjax)),
''id=:id'',array('':id''=>$post_id));
En la consulta normal, la consulta será
UPDATE tbl_post set star= star + 1,total = total + ''$ratingAjax'' where id = 1
¿Alguien sabe dónde está el error?
Pruebe lo siguiente:
$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)
);
El uso de CDbExpression
le permitirá enviar una expresión para qué actualizar el valor de la columna.
Ver: http://www.yiiframework.com/doc/api/1.1/CDbCommand#update-detail
y: http://www.yiiframework.com/doc/api/1.1/CDbExpression# __construct-detail
Tu trabajando con cadenas, prueba esto:
$update = Yii::app()->db->createCommand()
->update(''tbl_post'', array(''star''=>''star + 1'',''total''=> ''total + ''.$ratingAjax),
''id=:id'',array('':id''=>$post_id));