Update và Insert với Active Record class trên CodeIgniter

Ở bài lần trước chúng ta đã xem xét các phương thức liên quan đến việc Select dữ liệu từ DB. Trong bài này mình sẽ giới thiệu về phương thức liên quan đến việc Insert và Update dữ liệu từ DB trong Active Record. Update và Insert với Active Record class trên CodeIgniter cho phép bạn thực hiện các truy vấn Update và Insert dữ liệu vào DataBase một cách rất nhanh chóng và thuận tiện.

1. Insert Data.

Các hàm sau cho phép bạn tạo các truy vấn INSERT.

a. Hàm $this->db->insert().

Hàm này tạo ra một chuỗi truy vấn INSERT dựa vào dữ liệu bạn truyền vào. Bạn có thể truyền vào một mảng hoặc một object. Ví dụ:

$data = array(
   'title' => 'My title' ,
   'name' => 'My Name' ,
   'date' => 'My date'
);
$this->db->insert('mytable', $data); 
// Trả về: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

Tham số thứ 1 sẽ chứa tên bảng cần INSERT, tham số thứ 2 là một mảng các giá trị.

Ví dụ về việc sử dụng object.

/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->insert('mytable', $object); 
// Trả về: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')

Tham số đầu tiên sẽ chứa tên bảng, tham số thứ 2 là một object.

b. Hàm $this->db->insert_batch().

Hàm này dùng để INSERT nhiều dữ liệu cùng một lúc.

$data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);
$this->db->insert_batch('mytable', $data); 
// Trả về: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')

c. Hàm $this->db->set().

Hàm này cho phép bạn thiết lập giá trị để INSERT hoặc UPDATE. Hàm này có thể dùng thay việc truyền mảng dữ liệu trực tiếp.

$this->db->set('name', $name); 
$this->db->insert('mytable'); 
// Trả về: INSERT INTO mytable (name) VALUES ('{$name}')

Bạn có thể sử dụng để gọi nhiều hàm liên tiếp nhau.

$this->db->set('name', $name);
$this->db->set('title', $title);
$this->db->set('status', $status);
$this->db->insert('mytable');

Hàm set() cũng chấp nhận tham số thứ 3 ($escape), cái này sẽ bảo vệ dữ liệu của bạn khỏi việc ESCAPE dữ liệu nếu nó được thiết lập là FALSE.

$this->db->set('field', 'field+1', FALSE);
$this->db->insert('mytable'); 
// gives INSERT INTO mytable (field) VALUES (field+1)
$this->db->set('field', 'field+1');
$this->db->insert('mytable'); 
// gives INSERT INTO mytable (field) VALUES ('field+1')

Bạn cũng có thể truyền vào một mảng.

$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->set($array);
$this->db->insert('mytable');

Hoặc một object.

/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->set($object);
$this->db->insert('mytable');

2. UPDATE dữ liệu

a. Hàm $this->db->update().

Hàm này sinh ra một chuỗi truy vấn UPDATE. Bạn có thể truyền vào một mảng.

$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );
$this->db->where('id', $id);
$this->db->update('mytable', $data); 
// Trả về:
// UPDATE mytable 
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id

Hoặc một object.

/*
    class Myclass {

        var $title = 'My Title';

        var $content = 'My Content';

        var $date = 'My Date';

    }

*/

$object = new Myclass;

$this->db->where('id', $id);

$this->db->update('mytable', $object); 

// Trả về:

// UPDATE mytable 

// SET title = '{$title}', name = '{$name}', date = '{$date}'

// WHERE id = $id

Hoặc một mảng.

$this->db->update('mytable', $data, array('id' => $id));

Bạn có thể sử dụng hàm $this->db->set() để thay việc truyền dữ liệu vào.

b. Hàm $this->db->update_batch().

Hàm này dùng để UPDATE nhiều dữ liệu cùng lúc. Dữ liệu truyền vào có thể là mảng hoặc object.

$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->update_batch('mytable', $data, 'title'); 

// Trả về: 

// UPDATE `mytable` SET `name` = CASE

// WHEN `title` = 'My title' THEN 'My Name 2'

// WHEN `title` = 'Another title' THEN 'Another Name 2'

// ELSE `name` END,

// `date` = CASE 

// WHEN `title` = 'My title' THEN 'My date 2'

// WHEN `title` = 'Another title' THEN 'Another date 2'

// ELSE `date` END

// WHERE `title` IN ('My title','Another title')

Tham số đầu tiên chứa tên bảng, tham số thứ 2 là mảng giá trị, tham số thứ 3 là tham số khóa WHERE để update.

3. DELETE dữ liệu.

a. Hàm $this->db->delete().

Hàm này sinh ra truy vấn DELETE.

$this->db->delete('mytable', array('id' => $id)); 

// Trả về:

// DELETE FROM mytable 

// WHERE id = $id

Tham số đầu tiên là tên bảng, tham số thứ 2 là mệnh đề WHERE. Bạn có thể sử dụng hàm where() hoặc or_where() thay vì truyền dữ liệu vào tham số thứ 2 của hàm.

$this->db->where('id', $id);

$this->db->delete('mytable'); 

// Trả về:

// DELETE FROM mytable 

// WHERE id = $id

Bạn có thể truyền vào một mảng tên bảng để xóa dữ liệu từ nhiều bảng khác nhau.

$tables = array('table1', 'table2', 'table3');

$this->db->where('id', '5');

$this->db->delete($tables);

Nếu bạn muốn xóa tất cả dữ liệu từ một bảng, bạn có thể dùng hàm truncate(() hoặc empty_table().

b. Hàm $this->db->empty_table().

Hàm này dùng để xóa toàn bộ dữ liệu trong bảng.

$this->db->empty_table('mytable'); 

// Trả về

// DELETE FROM mytable

c. Hàm $this->db->truncate().

Hàm này cũng dùng để xóa toàn bộ dữ liệu trong bảng.

$this->db->from('mytable'); 

$this->db->truncate(); 

// hoặc

$this->db->truncate('mytable'); 

// Trả về:

// TRUNCATE mytable 

4. Cách NỐI để tạo một truy vấn hoàn chỉnh.

Nối các phương thức có ở trên làm đơn giản cấu trúc truy vấn của bạn. Hãy xem ví dụ sau:

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);

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

Chúc các bạn thành công :)