Codeigniter:更新多行

时间:2015-12-14 16:29:30

标签: php codeigniter

我正在使用Codeigniter 2,我想更新多行。

模型

这是我的模型,但问题是,第一行只是更新。

 foreach ($this->input->post('qty') as $key => $value) {
            $data = array(
                   'item_quantity' => $value,
                   'discount' => $this->input->post('discount')[$key],
                   'senior' => $this->input->post('qty')[$key]
            );

            $this->db->where('item_id', $this->input->post('item_id')[$key]);
            $this->db->where('request_id', $this->input->post('request_id'));
            return $this->db->update('medical_request_items', $data);  
        }

另一方面,我设法做到了这一点。

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

                                       echo '<tr>';
                                       echo '<input type="hidden" name="item_id[]" value="' . $row->item_id . '">';
                                       echo '<td>' . $x++ . '</td>';
                                       echo '<td>' . $row->item_id . '</td>';
                                       echo '<td>' . $row->item_name . '</td>';
                                       echo '<td><input type="text" size="1" name="qty[]" value="' . $row->item_quantity . '"></td>';
                                       echo '<td>' . $row->item_retailprice . '</td>';
                                       echo '<td><input type="text" size="2" name="discount[]" value="' . $row->discount . '"></td>';
                                       echo '<td><input type="text" size="2" name="senior[]" value="' . $row->senior . '"></td>';
                                       echo '<td>' . ($row->item_quantity * $row->item_retailprice) . '</td>';
                                       echo '<td>' . (($row->item_quantity * $row->item_retailprice)-($row->item_quantity * $row->discount)-($row->item_quantity * $row->senior)) . '</td>';
                                       echo '</tr>';                                                  
                                    }

我试图回复/打印,它工作正常。但它不适用于多次更新。

修改

所以我设法查看update_batch,但我有一个错误。

$data = array(
                    foreach ($this->input->post('qty') as $key => $value) {
                           array(
                              'request_id'      =>  $this->input->post('request_id'),
                              'item_id'         =>  $this->input->post('item_id')[$key],
                              'item_quantity'   =>  $value,
                              'discount'        =>  $this->input->post('discount')[$key],
                              'senior'          =>  $this->input->post('senior')[$key]
                           )
                    }
                );



        $this->db->update_batch('medical_request_items', $data, 'item_id, request_id'); 

2 个答案:

答案 0 :(得分:0)

您正在发布多个阵列,但在您的模型中,您只是循环遍历一个,因此您的where子句将始终相同。

答案 1 :(得分:0)

你绝对可以一次预告并更新一条记录。但我认为也应该能够使用更新批处理一次完成所有这些操作。

$this->db->update_batch('yourTableName', $updateData, 'field_to_use_for_key'); 

ci 2的信息 http://www.codeigniter.com/userguide2/database/active_record.html

====

好吧让我们深入研究代码

    // define an array 
    $requests = array() ; 


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

     // notice the brackets, very important $requests[] 
     // this will add to the same array in each loop

         $requests[] =      array(
             'request_id'      =>  $this->input->post('request_id'),
              'item_id'         =>  $this->input->post('item_id')[$key],
              'item_quantity'   =>  $value,
              'discount'        =>  $this->input->post('discount')[$key],
              'senior'          =>  $this->input->post('senior')[$key]
                           ) ; 


                    }


   // for testing only -- echo out your array so you can confirm its all good 
   echo 'here is requests array: <br><pre>' ; 

   print_r($requests) ; 

    echo '</pre>' ; 


// use one field to act as the key 
 $this->db->update_batch('medical_request_items', $requests, 'request_id'); 

这样就可以使用一把钥匙了。如果你需要更多的密钥或更新的条件 - 那么只需在foreach循环中更新。此外,您当然在更新前验证任何用户数据