如何在codeigniter中一个接一个地更新两个表数据?

时间:2015-07-30 07:36:24

标签: php mysql codeigniter sql-update

I create a model to update plan data but now with that i want to update the vendor_plan_task_mapping data because i use the plan data with vendor so when i update the plan after creating a vendor with some plan the updated plan data can't come to vendor task status mapping data hear i create a model for updating plan i have to update task_status_mapp table to be update...

如何使用vendor_plan_task_status_mapp表更新计划。

计划更新的模型是

public function updatePlanData(){

    $planId = $this->input->post('plan_id');
    $data = array(

                    'plan_title' => $this->input->post('plan_title'),
                    'plan_price' => $this->input->post('plan_price'),
                    'plan_desc'     => $this->input->post('plan_desc')

                );

    $this->db->where('plan_id', $planId);
    $this->db->update('tbl_plan', $data);


    $this->db->where('plan_id',$planId);
    $this->db->delete('plan_task_mapping');



    foreach ($this->input->post('task_id') as $key => $value)

     {
        $data2 = array(

        'plan_id' => $planId,
        'task_id'   => $value

        );
     // echo "Index {$key}'s value is {$value}.";
           $this->db->insert('plan_task_mapping', $data2);
     }

//-------- HEAR I NEED A CODE TO UPDATE The V_T_S_M table-----------

}

第一次表更新后我想更新vendr_task_status_mapping表中的数据?????

3 个答案:

答案 0 :(得分:2)

在此答案中,如果您更改计划但是使用此代码,则会出现错误,您必须简单编辑并更新此信息并且此模型会为您的任务创建一个新ID并再次插入。

 public function vendorUpdateModel($data)

       {
         $vendor_id = $this->input->post('vendor_id');
         $data = array(
           'category_id' => $this->input->post('category_id'),
           'plan_id' => $this->input->post('plan_id'),
           'city_id' => $this->input->post('city_id'),
           'business_name' => $this->input->post('business_name'),
           'owner_name' => $this->input->post('owner_name'),
           'contact_no1' => $this->input->post('contact_no1'),
           'contact_no2' => $this->input->post('contact_no2'),
           'vendor_email' => $this->input->post('vendor_email'),
           'subscription_date' => $this->input->post('subscription_date'),
           'vendor_description' => $this->input->post('vendor_description'),
           'vendor_address' => $this->input->post('vendor_address')

           );

       $this->db->where('vendor_id', $vendor_id);
       $this->db->update('vendor',$data);

       $this->db->where('vendor_id',$vendor_id);
       $this->db->delete('vendor_task_status_mapping');

       $this->db->select('task_mapp_id');
       $this->db->where('plan_id',$this->input->post('plan_id'));

       $query = $this->db->get('plan_task_mapping');

       foreach($query->result() as $row)

       {
       $data2 = array(

       'task_mapp_id' => $row->task_mapp_id,
       'vendor_id'  => $vendor_id,
          'task_status'  => '0'

          );

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

答案 1 :(得分:1)

如果您在plan_task_mapping表中添加了一个字段以添加唯一编号,那么......当您提及您的代码时:

$unique=array();
foreach ($this->input->post('task_id') as $key => $value)
 {
   $no=rand(0, 15);
    $data2 = array(
    'unique_no'=>$no,
    'plan_id' => $planId,
    'task_id'   => $value
    );
   $unique[] = $no; //store no in array to use it.

 // echo "Index {$key}'s value is {$value}.";
       $this->db->insert('plan_task_mapping', $data2);
 }

删除plan_task_mapping表数据之前。获取该数据。

function select()
{
    $this->db->where('plan_id',$planId);
    $Q = $this->db->get('plan_task_mapping');
    if($Q->num_rows() > 0)
    {
        foreach ($Q->result_array() as $row)
        {
            $data[] = $row;
        }
    }
    $Q->free_result();
    return $data;
}

然后删除代码中提到的数据:

 $this->db->where('plan_id',$planId);
 $this->db->delete('plan_task_mapping');

然后从VTSM表中删除旧数据:

 $this->db->where('vendor_plan_task_mapping_id',$data[0]['id']); //this data[0]['id'] come form select(). change field name if required.
 $this->db->delete('VTSM');

这里通过我们将它存储在数组中的唯一no://来获取新插入的数据。

foreach($unique as $u_no)
{
   $this->db->where('unique_no',$u_no);
    $Q = $this->db->get('plan_task_mapping');
    if($Q->num_rows() > 0)
    {
        foreach ($Q->result_array() as $row1)
        {
            $plan[] = $row1;
        }
    }
    $Q->free_result();
    return $plan;
}

在上面的代码中,我们获取了新的插入数据,以使其id插入状态。

现在插入状态:

foreach($plan as $a)
{
    $Sdata=array(
        "plan_task_mapping_id"=>$a['id'], //this is new id change name if required
      "status"="your new status");
      $this->db->insert('VTSM',$Sdata);

}

答案 2 :(得分:0)

使用$this->db->insert_batch();而非插入foreach loop。 请查看此link如何使用它。