例如我在數據庫有這樣的結構:將數據插入兩個表,一個依賴於另一個
表1: [ID] [內容]
表2: [ID] [table1_id]
我想在這兩個表中同時插入一些數據,但是問題出在table1的主鍵[table1_id]上。我如何插入它?
例如我在數據庫有這樣的結構:將數據插入兩個表,一個依賴於另一個
表1: [ID] [內容]
表2: [ID] [table1_id]
我想在這兩個表中同時插入一些數據,但是問題出在table1的主鍵[table1_id]上。我如何插入它?
爲了將表1的主鍵插入到表2中,代碼點火器內置了輔助函數以幫助完成此任務。
//prepare data for table 1
$data = array(
'conent' => 'My content',
);
//insert into table 1
$this->db->insert('table1',$data);
//prepare data for table 2
$data = array(
'table1_id' => $this->db->insert_id(),
);
//insert into table 2
$this->db->insert('table2',$data);
@Sudarshan你能解釋這是怎麼回事嗎?它看起來像這個鏈接中使用的方法是相同的,如上所示 –
看到下面的評論,我認爲你看到了第一個。它更好地獲取最新插入的ID。 – Sudarshan
非常感謝! – user3819713
正如您在table2中引用table1_id所以您必須先插入您的table1字段。然後你可以插入到table2中。 這裏是你可以在你的控制器
public function insert(){
$data['table1_data']=$this->ur_model->insert_table1();
$latest_id=$this->ur_model->get_latest_id();
$data['table1_data']=$this->ur_model->insert_table2($latest_id);
}
在你的模型做什麼
function insert_table1(){
$data=array(
'content'=>$this->input->post('content')
);
$this->db->insert('table1',$data);
//better return true on success
}
public function get_latest_id(){
$sql=$this->db->query("SELECT MAX(id) as id FROM table1");
return $sql->row_array();
}
function insert_table2($table1_id){
$data=array(
'content'=>$this->input->post('content'),
'table1_id'=>$table1_id['id']
);
$this->db->insert('table2',$data);
}
所以,你總是會得到最新的ID插入table1_id。
我在問問題之前就想到了這個解決方案,我開始想知道如果我的網站上有非常大的流量,並且有兩個用戶同時調用此功能,該怎麼辦?這是可能的順序:第一個用戶調用,所以數據插入到table1,但在同一時間第二個用戶調用函數,所以再次數據插入到table1和第一個用戶將有錯誤的數據。本·布羅德利答案在我看來更好 – user3819713
檢查此http://gotoanswer.com/?q=How+to+insert+into+multiple+tables+with+CodeIgniter第二帖子 – Sudarshan
上述解決方案,你接受作品,但在小學關鍵的情況下,如果這不是主鍵,可能會產生問題。 – Sudarshan
首先你必須插入table1然後在表2中 – Sudarshan