вставить последний вставленный идентификатор записи в массив в другой таблице, используя Codeigniter - PullRequest
0 голосов
/ 03 декабря 2018

, поэтому я получил две таблицы, одну из которых называли пациентами, а другую - тесты, в таблице тестов есть идентификатор пациента, у меня есть страница под названием добавить пациента, в которой есть поля для добавления новой информации о пациенте и другие поля для добавления их информации о тесте и загрузки всех данных.данные в две таблицы в одном запросе, поля тестов могли дублироваться с помощью ajax, чтобы я мог добавить более одного теста к одному пациенту, теперь я хочу добавить более одного теста одновременно в таблицу тестов, и мне удалосьсделать это, но дело в том, что я не могу добавить Patient_ID в таблицу тестов, я хочу добавить один и тот же Patient_ID более одного раза для всех тестов, которые я добавил при добавлении нового пациента на этой странице, я новичок в Codeigniter! это страница добавления

поля пациента и поля теста

<input type="text" name="patientname" />
<input type="text" name="address" />

<input type="text" name="testname[]"/>
<input type="text" name="price[]" />

и это мой контроллер

public function testbby
{
    $this->load->model("khmodel", "Khmodel");

    // patient main info
    $patient_input_data = array();
    $patient_input_data['patientname'] = $this->input->post('patientname');
    $patient_input_data['address'] = $this->input->post('address');

    //test data
    $testname = $this->input->post('testname[]');
    $price = $this->input->post('price[]');

    $test_input_data = array();
    for ($i = 0; $i < count($testname); $i ++ )
    {
        $test_input_data[$i] = array(
            'testname' => $testname[$i],
            'price' => $price[$i],
        );
    }
    $this->Khmodel->insert_bby($patient_input_data, $test_input_data);

    redirect('main/dashboard');
}

и этомоя модель

public function insert_bby($patient, $test)
{
    $this->db->insert('patients', $patient);
    $patient_id = $this->db->insert_id();

    // i used this and it worked but only while adding one test , s
    //once it's gonna be an array i dunno what to do with the id !
    //$test['refpatient']=$patient_id;
    $this->db->insert_batch('tests', $test);

    return $insert_id = $this->db->insert_id();
}

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

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

 public function testbby
{
$this->load->model("khmodel", "Khmodel");

// patient main info
$patient_input_data = array();
$patient_input_data['patientname'] = $this->input->post('patientname');
$patient_input_data['address'] = $this->input->post('address');

//test data
$testname = $this->input->post('testname[]');
$price = $this->input->post('price[]');

    $this->db->reset_query();
    $this->db->insert('patients', $patient_input_data);
    $patient_id=$this->db->insert_id();
$test_input_data = array();
for ($i = 0; $i < count($testname); $i ++ )
{
    $test_input_data[] = array(
        'testname' => $testname[$i],
        'price' => $price[$i],
        'patient_id'=>$patient_id

    );
}
  $this->db->reset_query();
  $this->db->insert_batch('tbl_tests',$test_input_data);
   redirect('main/dashboard');
   }
0 голосов
/ 03 декабря 2018

Для начала вам это не нужно.

$patient_input_data = array();

Потому что, когда вы совершите вызов

$patient_input_data['patientname'] = $this->input->post('patientname');

Будет создан массив $patient_input_data.Есть моменты, когда вы можете захотеть убедиться, что у вас есть массив, даже если он пустой.Но это не один из них.

Для входных значений массива, т. Е. testname[], получить данные, оставив скобки в конце имени.Вот так.

//test data
$testname = $this->input->post('testname'); //instead of post('testname[]')
$price = $this->input->post('price');

Переменные $testname и $price будут массивами с элементом для каждого поля в форме.

Мне кажется, что эти два ввода необходимы, поэтому вы должны добавить код, чтобы проверить, что это так.Класс проверки формы отлично подходит для этой цели.

Массив $test_input_data - это тот случай, когда вы захотите , чтобы массив существовал - даже если он пустой.Вам не нужно явно указывать значение индекса при добавлении элементов в массив, т.е. $test_input_data[$i] = array(..., потому что $test_input_data[] = array(... будет работать просто отлично, но в любом случае это не принесет вреда.

На модели.Первая часть хороша.Для второго вам нужно создать массивы, которые содержат идентификатор пациента, который вы получили из первой вставки, и добавить это значение к каждому из подмассивов в аргументе $tests.Модель становится такой.

public function insert_bby($patient, $tests)
{
    $this->db->insert('patients', $patient);
    $patient_id = $this->db->insert_id();
    // add the patient id key/value to each sub-array in $tests
    foreach ($tests as $test)
    {
        $test['patient id'] = $patient_id;
    }
    // will return the number of rows inserted or FALSE on failure
    return $this->db->insert_batch('tests', $tests);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...