2017-06-21 91 views
0

我需要在「產品」表中添加的產品,我也得到了高附加值產品ID,然後添加表中該產品的詳細信息「產品詳細信息」具有多種功能的笨交易

在官方笨的網頁,他們展示如何做到這一點,但沒有使用功能,例如:

$this->db->trans_start(TRUE); // Query will be rolled back 
$this->db->query('AN SQL QUERY...'); 
$this->db->trans_complete(); 

我需要使用的功能,並仍保持完整,如果兩個查詢的一個出現故障,則未添加記錄,我已經準備好下面的代碼,我想知道如果以這種方式Codeigniter將能夠檢測到查詢失敗或不撤消記錄或者如果re是另一種最佳做法或其他方式。

而不是使用$ this-> db-> query('AN SQL QUERY ...');我使用的是 功能:

public function init_product() 
{ 
    $this->db->trans_begin(); 
    $this->new_product(); 
    $this->new_product_details(); 

    if ($this->db->trans_status() === FALSE) 
     $this->db->trans_rollback(); 
    } else { 
     $this->db->trans_commit(); 
    } 
} 

加入本品並返回總產品ID

public function new_product() 
{  
    $data = array(   
     'name' => $this->input->post('name'), 
     'details' => $this->input->post('details'), 
     'price' => $this->input->post('price') 
    ); 
    $this->db->insert('products', $data); 
    if($this->db->affected_rows()) {    
     return $this->db->insert_id(); 
    } 
    return false; 
} 

添加產品詳細信息

public function new_product_details() 
{  
    $data = array(   
     'product_id' => $this->new_product(), 
     'user_id' => $this->session->id_user 
    ); 
    $this->db->insert('products', $data); 
    if($this->db->affected_rows()) {    
     return true; 
    } 
    return false; 
} 

如您所述,我需要知道這種方式是否有效,即使我不像Codeigniter中那樣遵循示例,並且如果使用這些函數Codeigniter可以檢測數據庫中的查詢或插入是否失敗,那麼if他們可以給我一些更好的例子。

感謝您的幫助

回答

2

你爲什麼要這麼做?將無法工作。我看見你使用相同的表,你爲什麼不初始功能做到這一點,並返回插入的ID,如果你需要它,像這樣:

public function init_product() 
{ 
    $this->db->trans_begin(); 

    $data = array(   
     'name' => $this->input->post('name'), 
     'details' => $this->input->post('details'), 
     'price' => $this->input->post('price'), 
     'user_id' => $this->session->id_user 
    ); 

    $this->db->insert('products', $data); 

    if ($this->db->trans_status() === FALSE) 
     $this->db->trans_rollback(); 
    } else { 
     $this->db->trans_commit(); 
    } 

    return $this->db->insert_id(); 
} 
+0

好主意,這也是一個辦法做到這一點,我想用功能最有組織的方式去做 –