2015-05-09 3 views
0

Например у меня такой структуры в базе данных:вставки данных в двух таблицах, один зависит от другого

таблица1: [ID] [содержание]

таблица2: [ID] [table1_id]

и я хочу вставить некоторые данные одновременно в эти две таблицы, но проблема заключается в [table1_id], который является первичным ключом из таблицы1. Как его вставить?

+0

Сначала вы должны вставить в таблицу1, а затем в таблицу2 – Sudarshan

ответ

0

Чтобы вставить первичный ключ таблицы 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); 
+0

@ Сударшан вы могли бы объяснить, как это отличается? Похоже, что методология, используемая в этой ссылке, идентична методологии, приведенной выше. –

+0

См. Ниже комментарий, я думаю, вы видели первый. Лучше всего получить последний вставленный идентификатор. – Sudarshan

+0

Большое спасибо! – user3819713

0

Как вы обращаетесь к таблице1_id в таблице2, поэтому вы должны сначала вставить свои поля table1. Затем вы можете вставить в таблицу2. Вот что вы можете сделать в вашем контроллере

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); 
} 

Так что вы всегда будете получать последние идентификатор вставляется в table1_id.

+0

Я думаю об этих решениях, прежде чем задать вопрос, и я начинаю задаваться вопросом, что, если у меня действительно очень большой трафик на моем сайте, и два пользователя одновременно называют эту функцию? Этот порядок возможен: первый пользовательский вызов, так что вставка данных в таблицу1, но в то же время вторая функция вызова пользователя, чтобы снова вставить данные в таблицу1, а у первого пользователя были неправильные данные. Ответ Бена Бродли мне кажется лучше – user3819713

+0

проверьте это http://gotoanswer.com/?q=How+to+insert+into+multiple+tables+with+CodeIgniter второе сообщение – Sudarshan

+0

вышеупомянутое решение, которое вы приняли, но в основном если это не первичный ключ, который может создать проблему. – Sudarshan

Смежные вопросы