2012-09-03 14 views
6

E 'possibile avere una "transazione" con per separare i modelli. Voglio inserire un post con i loro tag. Tag e post sono in due modelli separati. Come posso arrivare a gestirlo con una transazione? (Come sotto :)Codeigniter una transazione con due modelli

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

dov'è il problema nel codice? – amd

risposta

5

Finché non sono presenti altre istruzioni di transazione nei metodi del modello, il codice di esempio dovrebbe funzionare correttamente.

Come per la documentazione, è possibile verificare che passando 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 
} 

Passando TRUE a trans_start() verrà rollback automaticamente la transazione al termine. Dovresti essere in grado di controllare i valori auto_increment sulle tue tabelle (se applicabile) per vedere se la transazione ha funzionato o meno.

+0

Immagino che ci sarà un controller in questo caso, giusto? questo codice verrà inserito all'interno del controller ??? – Lykos

+0

@Lykos Non deve essere. Questo potrebbe essere anche nel metodo del tuo modello (cioè dove dovrebbe essere, realisticamente). Se stai lavorando con DB direttamente nel controller, allora sì è posizionato nel controller attorno al tuo codice DB. – Brendan

+0

Personalmente ho sempre messo la mia roba nei miei modelli, ma come Tschempe ha chiesto in precedenza, è ok a fare $ this-> db-> trans_start(); $ this-> post_model-> insert ('...'); $ this-> tags_model-> insert ('...'); all'interno del controller, per inserire dati in diverse tabelle db contemporaneamente? – Lykos

Problemi correlati