示例#1
0
 /**
  * Delete record(s) from this table, optionally extending by specifying a $Join to
  * delete adjoining data from both
  *
  * @param ifx_Model $JoinObject
  * @param mixed $JoinType
  *
  * @return bool
  */
 public final function delete(ifx_Model $JoinObject = null, $JoinType = 'INNER')
 {
     if (!empty($JoinObject) and is_a($JoinObject, get_class())) {
         //Generate the join
         $this->_forge_join($JoinObject, $JoinType);
         //Generate the query
         $SQL = 'DELETE ' . $JoinObject->_table() . ', ' . $this->_table() . ' FROM ' . $this->_forged_join();
         //If this object was loaded, limit by this record
         if ($this->is_loaded()) {
             $this->db->where($this->_table() . '.' . $this->_id(), $this->id());
         }
         //If the join object was loaded, limit the query by the loaded record
         if ($JoinObject->is_loaded()) {
             $this->db->where($JoinObject->_table() . '.' . $JoinObject->_id(), $JoinObject->id());
         }
         //Get the WHERE portion from CI_DB_AR
         $Where = implode(' ', $this->db->ar_where);
         $this->db->ar_where = array();
         //Join the WHERE, if any
         $SQL .= !empty($Where) ? ' WHERE ' . $Where : '';
         //Run the query
         $this->db->query($SQL);
         //Reset the forged table for next time
         $this->_clear_forged_join();
     } elseif ($this->is_loaded()) {
         //We only allow deletes for a loaded record, to avoid whole table deletes
         $this->db->where($this->_id(), $this->id());
         $this->db->delete($this->_table());
     }
     if ($this->db->affected_rows() >= 1) {
         $this->_data = array();
         return true;
     }
     return false;
 }