Codeigniter重建查询输出数组以插入到另一个表中


Codeigniter reconstruct query output array to insert in another table

在完成临时(costing_detail_temp)表中的数据处理后,
我必须将该数据插入到永久(costing_detail)表中带有一些额外列值的行中。costing_detail表具有与costing_detail_temp相同的列以及一些附加列。所以,我必须做以下事情:

  1. 对costing_detail_temp运行查询并选择一行
  2. 在返回的数组中添加一些键值对
  3. 插入成本核算明细。所以,这是我的模型的代码:

    函数add_new_detail($Temp_id){$loggedUserID=$this->session->userdata('id_user');$added_on=日期('Y-m-d H:i:s');$added_date=日期('Y-m-d');$ip=$this->input->ip_address();$qry="SELECT*FROM costing_detail_temp WHERE temp_id="$Temp_id;$query=$this->db->query($qry);$data_item_list=$query->result();$additional_data=数组('added_by'=>$loggedUserID,'added_on'=>$added_on,'added_date'=>$added_date,'operation_ip'=>$ip);//在$data_item_list中推送数组$additional_dataarray_push($data_item_list,$additional_data)//**********//插入具有组合数组的行$this->db->insert('scong_detail',$data_item_list);返回$data_item_list;}

这将返回以下数组:

大堆([0]=>stdClass对象([Temp_id]=>20160300101【Quotation_id】=>201603001[项目名称]=>BYA:3 x 3 re(3-w)红色[item_id]=>0[项目规范]=>芯=3,电线=3,绝缘=聚氯乙烯,直径=3mm,颜色=红色【需求数量】=>3.00)[1] =>阵列([added_by]=>12〔added_on〕=>2016-04-04 12:15:47[添加日期]=>2016年4月4日[operation_ip]=>127.0.0.1))

然而,我需要这样的东西:

大堆([0]=>stdClass对象([Temp_id]=>20160300101【Quotation_id】=>201603001[项目名称]=>BYA:3 x 3 re(3-w)红色[item_id]=>0[项目规范]=>芯=3,电线=3,绝缘=聚氯乙烯,直径=3mm,颜色=红色【需求数量】=>3.00[added_by]=>12〔added_on〕=>2016-04-04 12:15:47[添加日期]=>2016年4月4日[operation_ip]=>127.0.0.1))

我怎样才能做到这一点?

尝试使用foreach来获得想要获得的结果,并将其插入数组中,如下例所示:

function add_new_detail($Temp_id)
        {
            $loggedUserID = $this->session->userdata('id_user');
            $added_on = date('Y-m-d H:i:s');
            $added_date = date('Y-m-d');    
            $ip = $this->input->ip_address();
            $qry = "SELECT * FROM costing_detail_temp WHERE Temp_id = ".$Temp_id;
            $query = $this->db->query($qry);
            $data_itemlist = array();
            foreach ($query->result() as $dat) {
                foreach ($dat as $key => $value) {
                    $data_itemlist[$key] = $value;
                }
                $data_itemlist['added_by'] = $loggedUserID;
                $data_itemlist['added_on'] = $added_on;
                $data_itemlist['added_date'] = $added_date;
                $data_itemlist['operation_ip'] = $ip;
            }
            $this->db->insert('costing_detail', $data_itemlist);
            return $data_itemlist;
        }

输出

Array(
[Temp_id] => 20160300101
            [Quotation_id] => 201603001
            [item_name] => BYA :3x 3 re (3-w) Red
            [item_id] => 0
            [Item_Specification] => core=3, wire=3, insulation=pvc, dia=3mm, color=red
            [Required_Quantity] => 3.00
            [added_by] => 12
            [added_on] => 2016-04-04 12:15:47
            [added_date] => 2016-04-04
            [operation_ip] => 127.0.0.1
)

试试这个代码。

function add_new_detail($Temp_id)
{
    $loggedUserID = $this->session->userdata('id_user');
    $added_on = date('Y-m-d H:i:s');
    $added_date = date('Y-m-d');    
    $ip = $this->input->ip_address();
    $qry = "SELECT * FROM costing_detail_temp WHERE Temp_id = ".$Temp_id;
    $query = $this->db->query($qry);
    $data_item_list = $query->result_array(); // result as an array
    // add additional data
    foreach ($data_item_list as $key => $item) 
    {
        $data_item_list[$key]['added_by'] = $loggedUserID;
        $data_item_list[$key]['added_on'] = $added_on;
        $data_item_list[$key]['added_date'] = $added_date;
        $data_item_list[$key]['operation_ip'] = $operation_ip;
    }
    //insert a row with the combined array
    $this->db->insert('costing_detail', $data_item_list);
    return $data_item_list;
}