2015-08-04 2 views
0

Im пытается вставить данные в MySQL с помощью рамки CodeIgniter, когда при попытке будет показывать эту ошибкуКак вставить родительскую таблицу данных и детскую таблицу одновременно?

Error Number: 1452 

Cannot add or update a child row: a foreign key constraint fails (`pslsystem`.`invoice_description`, CONSTRAINT `invoice_description_ibfk_1` FOREIGN KEY (`reference_no`) REFERENCES `myinvoice` (`reference_no`) ON DELETE CASCADE ON UPDATE CASCADE) 

INSERT INTO `invoice_description` (`reference_no`, `description`) VALUES (6, 'description1') 

Filename: C:/xampp/htdocs/pslsystem/application/models/sample_model.php 

Line Number: 21 

Это мои две таблицы:

CREATE TABLE myinvoice (
    invoice_id INT NOT NULL AUTO_INCREMENT, 
    invoice_type varchar(30) NOT NULL, 
    reference_no varchar(30) NOT NULL UNIQUE, 
    des_title varchar(300) NULL , 
    PRIMARY KEY (invoice_id, reference_no) 

) ENGINE=InnoDB; 

CREATE TABLE invoice_description(
des_id INT NOT NULL AUTO_INCREMENT, 
reference_no varchar(30) NOT NULL, 
description varchar(300) NOT NULL, 
PRIMARY KEY (des_id,reference_no), 
FOREIGN KEY (reference_no) REFERENCES myinvoice (reference_no) on delete cascade ON UPDATE CASCADE 
)ENGINE=InnoDB; 

вот моя модель

function insert_entry($data1, $data2) { 

    $this->db->insert('myinvoice', $data1); 

    $data2['reference_no'] = $this->db->insert_id(); 

    $this->db->insert('invoice_description', $data2); 
} 

Это мой контроллер:

if($this->form_validation->run()) 
     { 
      $this->load->database(); 
      $this->load->model('sample_model'); 
      $data1 = array(
        'invoice_type' => $this->input->post('type'), 
        'reference_no' => $this->input->post('ref'), 
        'des_title' => $this->input->post('title'), 

       ); 

     $data2 = array(
      'reference_no' => $this->input->post('ref'), 
      'description' => $this->input->post('des'), 
     ); 

      $this->sample_model->insert_entry($data1,$data2); 



     }else{ 

      $this->load->view('sample_view'); 
     } 

, когда я пытаюсь вставить только данные родительских таблиц. и засовывает эту ошибку.

+0

в соответствии с вашим кодом, ограничение внешнего ключа должно быть на invoice_id, и после просмотра вашего запроса, похоже, что вставка родительской таблицы не возвращала целое число и также нужно проверить это. Я также предлагаю вам изменить структуру таблицы. –

ответ

0

Вы пытаетесь вставить reference_no в invoice_description два раза После того, как вы установили в в коде Controler

$data2 = array(
      'reference_no' => $this->input->post('ref'), 
      'description' => $this->input->post('des'), 
     ); 

И второй в модели

$this->db->insert('myinvoice', $data1); 
$data2['reference_no'] = $this->db->insert_id(); 

Просто удалите

$data2['reference_no'] = $this->db->insert_id(); 

Это из вашей модели, потому что это последний вставленный идентификатор, а не ваш reference_no

+0

Спасибо @Saty, я просто удалю этот код, его работы прекрасны :) и еще одна вещь, я хочу помочь с ur в моей ** таблице invoice_desctrption **, я хочу добавить несколько строк для одного ** ref_no ** i knw нам нужно использовать * * forech loop **, но я не знаю, как использовать :(meanz добавить динамические файлы ** _ (description) _ ** thrw, которые вставляют mutiple row i knw, как добавить динамическую подачу, но я знаю, как использовать цикл foreach здесь. .... :( – Hamelraj

+0

[эта ссылка пытается помочь мне] (http://stackoverflow.com/questions/31200658/how-to-insert-arrays-into-mysql-using-codeigniter) – Hamelraj

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