varios update una tabla sentencia registros registro otra modificar formulario datos comando actualizar mysql sql codeigniter activerecord

mysql - update - modificar registro sql server



Incremente el campo de la base de datos mysql usando la sintaxis del registro activo de codeigniter (2)

Tengo el siguiente script php-codeigniter que intenta incrementar un campo de un registro usando la sintaxis del registro activo:

$data = array(''votes'' => ''(votes + 1)''); $this->db->where(''id'', $post[''identifier'']); $this->db->update(''users'', $data);

Esto produce el siguiente SQL:

"UPDATE usuarios SET votos = ''(votes + 1)'' WHERE id = ''44'' "

Lo cual no se ejecuta, pero este SQL hace lo que estoy buscando: "UPDATE usuarios SET votos = (votes + 1) WHERE id = ''44'' " `<- Tenga en cuenta la falta de citas (votos + 1 )

¿Alguien sabe cómo implementar este tipo de consulta con la sintaxis del registro activo de codeigniter?


Puedes hacer lo que se indica a continuación:

$this->db->where(''id'', $post[''identifier'']); $this->db->set(''votes'', ''votes+1'', FALSE); $this->db->update(''users'');

La razón por la que esto funciona es porque el tercer parámetro (opcional) FALSO le dice a CodeIgniter que no proteja la consulta generada con barras invertidas ( '' ). Esto significa que el SQL generado será:

UPDATE users SET votes= votes + 1 WHERE id= ''44''

Si nota, los backticks se eliminan de ''(votes+1)'' , lo que produce el efecto deseado de incrementar el atributo de votos en 1.


$data = array(''votes'' => ''votes + 1''); foreach ($data as $key=>$val) { $this->db->set($key, $val, FALSE); } $this->db->where(''id'', $post[''identifier'']); $this->db->update(''users'', $data);