php - ellislab - ¿Cómo "restablecer" el registro activo de CodeIgniter para consultas consecutivas?
localhost/codeigniter (6)
En la segunda llamada de actualización, ¿necesita la url condicional? de ser así, después de llamar a la primera actualización, los datos ya no estarán disponibles para la segunda. Tendrá que configurar de nuevo:
function update($url, $id)
{
$this->db->where(''url'', $url);
$this->db->update(''projects'', array(''active'' => ''n''));
$this->db->where(''url'', $url);
$this->db->where(''eventid'', $id);
$this->db->update(''tasks'', array(''active'' => ''n''));
}
// Alternatively
function update($url, $id)
{
$where_bit = array(
''url'' => $url,
);
$this->db->update(''projects'', array(''active'' => ''n''), $where_bit);
$where_bit[''event_id''] = $id;
$this->db->update(''tasks'', array(''active'' => ''n''), $where_bit);
}
La actualización del registro activo de CI admite la condición donde se pasa como una matriz de clave => valor como el tercer parámetro (también como una cadena, pero en el caso de id, se recomienda usar la matriz)
Estoy usando CodeIgniter y tengo un caso en el que dos tablas (proyectos y tareas) deben actualizarse con un valor justo después de la otra (la columna activa debe configurarse en "n"). El código que estoy usando es:
function update($url, $id)
{
$this->db->where(''url'', $url);
$this->db->update(''projects'', array(''active'' => ''n''));
$this->db->where(''eventid'', $id);
$this->db->update(''tasks'', array(''active'' => ''n''));
}
Con este código, la tabla de proyectos se actualiza pero la tabla de tareas no se actualiza. Si comento $this->db->update(''projects'', array(''active'' => ''n''));
entonces la tabla de tareas se actualiza.
Reconozco que esto tiene algo que ver con el almacenamiento en caché, pero he intentado flush_cache
antes de las tareas db->update
call pero eso no tuvo ningún efecto.
¿Alguien puede explicar cómo se pueden ejecutar consultas de actualización consecutivas utilizando CodeIgniter?
Esto funciona:
$this->db->flush_cache();
Si no realiza un get () o un CI similar, no siempre se borra el caché. El código final se ve así:
$this->db->from(''table'');
$this->db->where(''field'', $field);
$count = $this->db->count_all_results();
$this->db->flush_cache();
Intente llamar a $this->db->reset();
después de la primera llamada de update
.
EDIT: meh, intente $this->db->_reset_write();
para vaciar todos los rastros de la consulta.
Para la versión 3 de Codeigniter la forma correcta es:
$this->db->reset_query()
Como se encuentra aquí: http://www.codeigniter.com/userguide3/database/query_builder.html#resetting-query-builder
Utilizar
$this->db->start_cache();
Antes de iniciar la construcción de consultas y
$this->db->stop_cache();
Después de terminar la construcción de consultas. Además, usar
$this->db->flush_cache();
Después de detener el caché.
tratar
$this->db->reconnect();
después de su consulta.
¡Buen día!