2012-09-03 11 views
6

के साथ एक लेनदेन अलग मॉडल के साथ एक "लेनदेन" संभव है। मैं अपने टैग के साथ एक पोस्ट डालना चाहता हूं। टैग और पोस्ट दो अलग-अलग मॉडल में हैं। मैं लेनदेन के साथ इसे संभालने के लिए कैसे प्राप्त कर सकता हूं? (नीचे की तरह :)कोडिनेटर दो मॉडल

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

आपके कोड में समस्या कहां है? – amd

उत्तर

5

जब तक आपके मॉडल विधियों में अन्य लेनदेन विवरण नहीं होते हैं, तो आपके नमूना कोड को ठीक काम करना चाहिए।

प्रलेखन के अनुसार, आप इसे $this->db->trans_start() को TRUE पास करके परीक्षण कर सकते हैं:

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

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

TRUEtrans_start() को पासिंग स्वचालित रूप से पूरा होने पर लेन-देन रोलबैक होगा। यह देखने के लिए कि क्या लेनदेन काम करता है या नहीं, आपको अपनी तालिकाओं (यदि लागू हो) पर auto_increment मानों को जांचने में सक्षम होना चाहिए।

+0

मुझे लगता है कि इस मामले में एक नियंत्रक होगा, है ना? यह कोड नियंत्रक के अंदर रखा जाएगा ??? – Lykos

+0

@Lykos यह होना जरूरी नहीं है। यह आपके मॉडल विधि में भी हो सकता है (यह वह जगह है जहां यह वास्तविकता होनी चाहिए)। यदि आप डीबी के साथ सीधे नियंत्रक में काम कर रहे हैं, तो हाँ यह आपके डीबी कोड के आसपास नियंत्रक में रखा गया है। – Brendan

+0

व्यक्तिगत मैं हमेशा अपने मॉडल में अपने क्रूड डालता हूं, लेकिन जैसा कि त्सकेम्पे ने ऊपर पूछा था, क्या यह $ यह-> डीबी-> trans_start() करना ठीक है; $ यह-> post_model-> डालें ('...'); $ यह-> टैग_मोडेल-> डालें ('...'); नियंत्रक के अंदर, एक बार में विभिन्न डीबी तालिकाओं में डेटा डालने के लिए? – Lykos