Duda query Active Record en CodeIgniter

Tunnecino

Hola!

Estoy trabajando en una web, y me ha tocado reescribir un query a Active Record, el query básicamente suma 1 al valor actual, pero me estoy dando cuenta de que ...->update('user', array('user_login_attempts' => 'user_login_attempts+1')) no lo hace correctamente.

Soy yo que me estoy equivocando? Hay alguna forma de hacer eso mediante Active Record?

djtonight

No creo que eso se pueda hacer.

Tendrías que hacer primero un get de ese valor en una variable, sumarle uno, y ya hacer el update con la variable.

Si acaso, para hacerlo todo con active record, sería cosa de hacer una subselect, pero no se si es demasiado lío. Yo es que me rayo bastante con las subselects y sus putas madres

1 respuesta
elkaoD

Buscando en Google "ActiveRecord increment":

http://stackoverflow.com/questions/6373564/increment-field-of-mysql-database-using-codeigniters-active-record-syntax

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

No sé muy bien cómo funciona ActiveRecord pero si el codigo de arriba es atómico no habría problema.

Cuidado con lo de #2 (y con el código anterior). Si no se realiza de forma atómica y la operación ocurre en dos hilos diferentes puedes perder uno de los incrementos.

Lo de #2 podrías hacerlo siempre y cuando envuelvas la operación en una transacción (que no sé si se puede en ActiveRecord).

Ejemplo de lo que puede pasar sin transacciones con dos operaciones paralelas:

A(lee) -> 32
B(lee) -> 32
A(escribe) -> 32 + 1
B(escribe) -> 32 + 1

Resultado: has perdido un incremento.

Tunnecino

Gracias, voy a cambiar todo, que parece que así funciona :)

Usuarios habituales

  • Tunnecino
  • elkaoD
  • djtonight