2016-04-23 92 views
0

我很抱歉,如果這已被回答以前(並會非常感謝,如果有人可以指向我),但我會怎麼去插入到多 - 多對多的連接表?Codeigniter插入多對多連接表/數據透視表

基本上我有一個基於體育賽事的比賽,因此有一個連接表來匹配contest_id和相關的sports_events_id。如果我要創建一個新的比賽,我怎樣才能同時插入連接表數據庫?

或者,我是否必須首先創建比賽才能獲得contest_id,然後(並且只有這樣)才能在連接表中插入所有相關的sports_events_id?

我很感激您可以提供的任何幫助和建議。

非常感謝。

解決方案

好了,所以我現在已經得到了以下的解決方案插入到連接表

控制器

function add() 
    { 
     $this->form_validation->set_rules('contest_name', 'Contest Name', 'required|trim|xss_clean'); 

     if ($this->form_validation->run() == FALSE) { 

      $data['view_file'] = 'add_contest'; 
      $this->load->module('template'); 
      $this->template->cmslayout($data); 

     } else { 

      $data1 = array(
       'contest_name' => $this->input->post('contest_name'), 
      ); 

      $data2 = $this->input->post('game'); 

      if ($this->_transactions_new_contest($data1, $data2)) { 
       return $query; 
      } 
      redirect('/contests/'); 
     } 
    } 

function _transactions_new_contest($data1, $data2) { 
    $this->load->model('mdl_contests'); 
    $this->mdl_contests->_transactions_new_contest($data1, $data2); 
} 

型號

function _transactions_new_contest($data1, $data2){ 
    $this->db->trans_start(); 
    $this->db->insert('contests', $data1); 
    $contest_id = $this->db->query('SELECT contests.id FROM contests ORDER BY contests.id DESC limit 1'); 
    foreach ($contest_id->result() as $row) { 
     $contest_result_id = $row->id; 
     $this->db->query('INSERT INTO contests_has_sports_events (contests_id, sports_events_id) VALUES (' . $contest_result_id . ', ' . $data2 . ')'); 
    } 
    $this->db->trans_complete(); 
} 

現在的問題是,如果我有多個sports_events_id或post('遊戲'),現在如何循環$ data2?

再次,如果你能指出我在正確的方向,將不勝感激。

+0

你的意思是連接表的數據透視表?如果你這樣做,你在這種特殊情況下並不需要數據透視表。只需使用外鍵約束。 – Corona

+0

當然可以。這完全錯過了我的想法。這是否就像一個foreach循環,其中插入的每個條目(在同一比賽中)將具有不同的id和sports_events_id,但是具有相同的外部約束ID?性能明智,哪個更值得推薦? –

回答

1

要回答您的問題,您需要先插入到父表中,然後使用父表ID作爲依賴表中的外鍵引用插入到從屬表中。

你實際上暗示的是交易。數據庫事務允許您以原子方式在不同表中插入,更新和刪除行:它們都工作並提交,或者如果失敗,它們都將回滾,因此您可以保持數據完整性。

CodeIgniter支持transactions

+0

很好,謝謝你的回答。這正是我需要的。現在,我將這些查詢放入交易中的順序是按照我放入的順序進行的,還是必須以另一種方式進行管理? –

+0

@ RyanN.You按您希望它們在事務塊內執行的順序編寫查詢。 – Wolf

+0

謝謝隊友。你一直很有幫助! –