向两张表中插入数据,一张依赖另一张
Insert data into two tables, one depend on another
例如我在数据库中有这样的结构:
表 1:
[ID]
[内容]
表2:
[ID]
[table1_id]
我想同时向这两个表中插入一些数据,但问题出在 [table1_id] 上,它是 table1 的主键。如何插入?
为了将 table 1 的主键插入到 table 2 中,code igniter 内置了辅助函数来帮助完成此任务。
//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);
因为您在表 2 中引用 table1_id,所以您必须先插入您的表 1 字段。然后你可以插入到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。
例如我在数据库中有这样的结构:
表 1: [ID] [内容]
表2: [ID] [table1_id]
我想同时向这两个表中插入一些数据,但问题出在 [table1_id] 上,它是 table1 的主键。如何插入?
为了将 table 1 的主键插入到 table 2 中,code igniter 内置了辅助函数来帮助完成此任务。
//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);
因为您在表 2 中引用 table1_id,所以您必须先插入您的表 1 字段。然后你可以插入到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。