2012-09-03 22 views
6

¿Es posible tener una "transacción" con para separar los modelos. Quiero insertar una publicación con sus etiquetas. Las etiquetas y las publicaciones están en dos modelos separados. ¿Cómo puedo lograr manejarlo con una transacción? (Como abajo :)Codeigniter una transacción con dos modelos

$this->db->trans_start(); 
$this->post_model->insert('...'); 
$this->tags_model->insert('...'); 
$this->db->trans_complete(); 
+0

¿dónde está el problema en su código? – amd

Respuesta

5

Siempre y cuando no tenga otras declaraciones de transacción en los métodos de su modelo, su código de muestra debería funcionar bien.

De acuerdo con la documentación, se puede probar que al pasar a TRUE$this->db->trans_start():

$this->db->trans_start(TRUE); 
// Queries/model calls 
$this->db->trans_complete(); 

if($this->db->trans_status() === FALSE) 
{ 
    // do something if it fails 
} 

Pasando a TRUEtrans_start() va a deshacer la transacción automáticamente al finalizar. Debería poder verificar los valores de auto_increment en sus tablas (si corresponde) para ver si la transacción funcionó o no.

+0

Supongo que habrá un controlador en este caso, ¿verdad? este código se colocará dentro del controlador ??? – Lykos

+0

@Lykos No tiene que ser así. Esto también podría estar en su método modelo (que es donde debe ser, de manera realista). Si está trabajando con DB directamente en el controlador, entonces sí se coloca en el controlador alrededor de su código DB. – Brendan

+0

Personalmente, siempre puse mi crud en mis modelos, pero como Tschempe preguntó anteriormente, ¿está bien hacer $ this-> db-> trans_start(); $ this-> post_model-> insert ('...'); $ this-> tags_model-> insert ('...'); dentro del controlador, para insertar datos en diferentes tablas db a la vez? – Lykos

Cuestiones relacionadas