我很抱歉,如果這已被回答以前(並會非常感謝,如果有人可以指向我),但我會怎麼去插入到多 - 多對多的連接表?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?
再次,如果你能指出我在正確的方向,將不勝感激。
你的意思是連接表的數據透視表?如果你這樣做,你在這種特殊情況下並不需要數據透視表。只需使用外鍵約束。 – Corona
當然可以。這完全錯過了我的想法。這是否就像一個foreach循環,其中插入的每個條目(在同一比賽中)將具有不同的id和sports_events_id,但是具有相同的外部約束ID?性能明智,哪個更值得推薦? –