From 41f60d44e37cc52d41a49d0d640f71761a82abe7 Mon Sep 17 00:00:00 2001 From: Derek Allard Date: Thu, 20 Dec 2007 20:09:22 +0000 Subject: Added the ability to pass an array of tables to the delete() statement in Active Record. --- system/database/DB_active_rec.php | 23 +++++++++++++++++++---- user_guide/changelog.html | 1 + user_guide/database/active_record.html | 18 ++++++++++-------- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php index dfa0a3efb..d48d1c5bd 100644 --- a/system/database/DB_active_rec.php +++ b/system/database/DB_active_rec.php @@ -925,11 +925,13 @@ class CI_DB_active_record extends CI_DB_driver { * Compiles a delete string and runs the query * * @access public - * @param string the table to retrieve the results from + * @param mixed the table(s) to delete from. String or array * @param mixed the where clause + * @param mixed the limit clause + * @param boolean * @return object */ - function delete($table = '', $where = '', $limit = NULL) + function delete($table = '', $where = '', $limit = NULL, $reset_data = TRUE) { if ($table == '') { @@ -945,6 +947,16 @@ class CI_DB_active_record extends CI_DB_driver { $table = $this->ar_from[0]; } + if (is_array($table)) + { + foreach($table as $single_table) + { + $this->delete($this->dbprefix.$single_table, $where, $limit, FALSE); + } + $this->_reset_write(); + return; + } + if ($where != '') { $this->where($where); @@ -963,10 +975,13 @@ class CI_DB_active_record extends CI_DB_driver { } return FALSE; } - + $sql = $this->_delete($this->dbprefix.$table, $this->ar_where, $this->ar_limit); - $this->_reset_write(); + if ($reset_data) + { + $this->_reset_write(); + } return $this->query($sql); } diff --git a/user_guide/changelog.html b/user_guide/changelog.html index 033824b56..3fbac474a 100644 --- a/user_guide/changelog.html +++ b/user_guide/changelog.html @@ -70,6 +70,7 @@ Change Log
  • Added 'random' as an order_by() option in Active Record.
  • Added where_in(), where_in_or(), where_not_in(), and where_not_in_or() to Active Record.
  • Added support for limit() into update() and delete() statements in Active Record.
  • +
  • Added the ability to pass an array of tables to the delete() statement in Active Record.
  • Added titles to all user manual pages.
  • Added a check for NULL fields in the MySQL database backup utility.
  • Documented the timezones() function in the Date Helper.
  • diff --git a/user_guide/database/active_record.html b/user_guide/database/active_record.html index d938b5dff..e7c823fde 100644 --- a/user_guide/database/active_record.html +++ b/user_guide/database/active_record.html @@ -623,14 +623,16 @@ $this->db->delete('mytable', array('id' => $id));

    The first parameter is the table name, the second is the where clause. You can also use the where() or or_where() functions instead of passing the data to the second parameter of the function:

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

    -// Produces:
    -// DELETE FROM mytable
    -// WHERE id = $id
    - +

    $this->db->where('id', $id);
    + $this->db->delete('mytable');
    +
    + // Produces:
    + // DELETE FROM mytable
    + // WHERE id = $id

    +

    An array of table names can be passed into delete() if you would like to delete data from more then 1 table.

    +

    $tables = array('table1', 'table2', 'table3');
    +$this->db->where('id', '5');
    +$this->db->delete($tables);

    Note: All values are escaped automatically producing safer queries.

    -- cgit v1.2.3-24-g4f1b