使用Codeigniter将最后插入的记录ID插入另一个表的数组中

时间:2018-12-02 23:31:24

标签: php mysql codeigniter

因此,我得到了两个表,一个表称为“患者”,另一个表称为“测试”,测试表具有“患者ID”,我有一个名为“添加患者”的页面,其中包含用于添加新患者信息的字段,以及用于添加其测试信息并上传所有内容的其他字段将数据放入一个查询的两个表中,测试字段可以由ajax复制到我可以向同一患者添加多个测试,现在我想同时向测试表中添加多个测试,并且我设法这样做,但是这种情况是我无法将耐心_id添加到测试表中,我想在同一页面中添加新患者的同时,向我添加的所有测试中多次添加同一个耐心_id,我是Codeigniter的新手! this is the adding page

患者字段和测试字段

<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 :(得分:0)

首先,您不需要这个。

$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将是数组,其中包含表单上每个字段的项目。

在我看来,这两个输入是必需的,因此您应该添加代码以检查情况是否如此。 Form Validation class非常适合这个目的。

在数组$test_input_data中,您希望数组存在-即使该数组为空。在将项目添加到数组时,您不必显式设置索引值,即$test_input_data[$i] = array(...,因为$test_input_data[] = array(...可以正常工作,但是两种方式都没有害处。 / p>

在模型上。第一部分是好的。对于第二个,您需要创建一个包含您从第一个插入中获得的患者ID的数组,并将该值添加到$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);
}

答案 1 :(得分:0)

我的意思是我不知道的值,但是您的代码似乎是如此正确和合理 但是我已经尝试了这段代码,并且效果很好,甚至没有使用模型/

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