2012-03-05 21 views
7

Tôi đang sử dụng hàm codeigniter update_batch.Tôi có thể thêm mảng vào mệnh đề where để update_batch trong mã vạch

Tôi muốn chuyển mảng dưới dạng tham số thứ ba (trong đó khoản) đến update_batch.

$data = array(
    array(
     'title' => 'My title' , 
     'name' => 'My Name 2' , 
     'date' => 'My date 2' 
    ), 
    array(
     'title' => 'Another title' , 
     'name' => 'Another Name 2' , 
     'date' => 'Another date 2' 
    ) 
); 

Thay vì điều này:

$this->db->update_batch('mytable', $data, 'title'); 

Tôi muốn làm điều này:

$this->db->update_batch('mytable', $data, array('title','name')); 

Vì vậy, nhiều nơi có điều kiện bổ sung.

Điều này có khả thi không?

+2

Tôi nghĩ rằng đặt cược tốt nhất của bạn sẽ là để ghi đè lên hàm update_batch bằng chức năng của riêng bạn. Chức năng này không tồn tại trong hàm. – Brendan

+2

Tôi hy vọng nhóm CodeIgniter sẽ tạo ra một phương pháp chèn/cập nhật đa khối cho khung công tác. Đối với tôi, phương thức lô cập nhật cho 1 chỉ mục nhanh hơn 1600% sau đó cập nhật dòng cơ sở dữ liệu theo dòng. – machineaddict

Trả lời

-3

Bạn luôn có thể làm điều này:

$data = array(
    array(
     'title' => 'My title' , 
     'name' => 'My Name 2' , 
     'date' => 'My date 2' 
    ), 
    array(
     'title' => 'Another title' , 
     'name' => 'Another Name 2' , 
     'date' => 'Another date 2' 
    ) 
); 
$this->db->where(array('title' => 'title', 'name' => 'name')); 
$this->db->update_batch('mytable', $data); 

Không thử nghiệm.

CẬP NHẬT Thiếu thông số yêu cầu where trong update_batch().

+2

Điều này không hoạt động –

0

Bạn có thể làm điều này bằng cách tạo ra phương pháp của bạn để cập nhật hàng loạt trong mô hình của bạn Test_model ví dụ vì CodeIgniter không hỗ trợ nhiều nơi tình trạng update_batch mẹ đẻ, vì vậy ví dụ dưới đây:

public function update_batch_custom($table_name, $data, $indexes) { 
    if (empty($data) || empty($indexes)){ 
     return 'Data or indexes must not be empty'; 
    } 

    $db = $this->load->database('test_db', TRUE); 
    $sql = 'UPDATE ' . $table_name . ' SET ' . "\n"; 

    //columns on which is done actual update 
    $columns = []; 
    foreach ($data[0] as $key => $value) { 
     if (!in_array($key, $indexes)){ 
      $columns[] = $key; 
     } 
    } 

    /* 
    * forming WHEN .. THEN sql parts and WHERE condition 
    */ 
    $parts = []; 
    $where = []; 
    foreach ($data as $row) { 
     foreach ($columns as $column) { 
      $sql_part = ' WHEN ('; 
      foreach ($indexes as $index) { 
       $sql_part .= $index . '= \''.$row[$index] . '\' AND '; 
       $where[$index][] = $row[$index]; 
      } 

      $sql_part = substr($sql_part, 0, -4); 
      $sql_part .= ') THEN \'' . $row[$column] . '\''; 
      $parts[$column][] = $sql_part; 
     } 
    } 

    /* 
    * connecting WHEN .. THEN parts for each column to be updated 
    */ 
    foreach ($columns as $column) { 
     $sql .= $column .'= CASE '; 
     foreach ($parts[$column] as $sql_part) { 
      $sql .= $sql_part; 
     } 
     $sql .= ' ELSE ' . $column . ' END,'; 
    } 

    /* 
    * adding WHERE part 
    */ 
    $sql = substr($sql, 0, -1); 
    $sql .= ' WHERE '; 
    foreach ($indexes as $index) { 
     if (count($where[$index]) > 0){ 
      $unique_where = array_unique($where[$index]); 
      $sql .= $index . ' IN (\'' . join('\',\'', $unique_where) . '\') AND '; 
     } 
    } 

    $sql = substr($sql, 0, -4); 
    $sql .= ';'; 

    return $db->query($sql); 
} 
Các vấn đề liên quan