吃货 发表于 2013-7-31 14:12:37

CI扩展类的问题求助各位大神

这个 是我application/libraries/MY_MODEL.php的代码<?phpif (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Extended Model Class
*
* Provides a number of useful functions to generate model specific queries.
* Takes inspiration from CakePHP's implementation of Model and keeps the function
* names pretty same.
*
* A list of functions would be:
*
* - loadTable
* - find
* - findAll
* - findCount
* - field
* - generateList
* - generateSingleArray
* - getAffectedRows
* - getID
* - getInsertID
* - getNumRows
* - insert
* - read
* - save
* - remove
* - query
* - lastQuery
*
* @package      CodeIgniter
* @subpackage    Libraries
* @category    Libraries
* @author      Md Emran Hasan (phpfour@gmail.com)
* @link      http://phpfour.com
*/
class MY_Model extends CI_Model
{

    /**
   * Value of the primary key ID of the record that this model is currently pointing to
   *
   * @var unknown_type
   * @access public
   */
    var $id = null;

    /**
   * Container for the data that this model gets from persistent storage (the database).
   *
   * @var array
   * @access public
   */
    var $data = array();

    /**
      * The name of the associate table name of the Model object
      * @var string
      * @access public
      */
    var $_table;

    /**
   * The name of the ID field for this Model.
   *
   * @var string
   * @access public
   */
    var $primaryKey = 'id';

    /**
   * Container for the fields of the table that this model gets from persistent storage (the database).
   *
   * @var array
   * @access public
   */
    var $fields = array();

    /**
   * The last inserted ID of the data that this model created
   *
   * @var int
   * @access private
   */
    var $__insertID = null;

    /**
   * The number of records returned by the last query
   *
   * @access private
   * @var int
   */
    var $__numRows = null;

    /**
   * The number of records affected by the last query
   *
   * @access private
   * @var int
   */
    var $__affectedRows = null;

    /**
   * Tells the model whether to return results in array or not
   *
   * @var string
   * @access public
   */
    var $returnArray = TRUE;

    /**
   * Prints helpful debug messages if asked
   *
   * @var string
   * @access public
   */
    var $debug = FALSE;

    /**
   * Constructor
   *
   * @access public
   */
    public function __construct()
    {
      parent::__construct();
      log_message('debug', "Extended Model Class Initialized");
    }

    /**
   * Load the associated database table.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @access public
   */

    public function loadTable($table, $fields = array())
    {
      if ($this->debug) log_message('debug', "Loading model table: $table");

      $this->_table= $table;
      $this->fields = (!empty($fields)) ? $fields : $this->db->list_fields($table);

      if ($this->debug)
      {
            log_message('debug', "Successfully Loaded model table: $table");
      }
    }

    /**
   * Returns a resultset array with specified fields from database matching given conditions.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return query result either in array or in object based on model config
   * @access public
   */

    function findAll($conditions = NULL, $fields = '*', $order = NULL, $start = 0, $limit = NULL)
    {
      if ($conditions != NULL)
      {
            if(is_array($conditions))
            {
                $this->db->where($conditions);
            }
            else
            {
                $this->db->where($conditions, NULL, FALSE);
            }
      }

      if ($fields != NULL)
      {
            $this->db->select($fields);
      }

      if ($order != NULL)
      {
            $this->db->orderby($order);
      }

      if ($limit != NULL)
      {
            $this->db->limit($limit, $start);
      }

      $query = $this->db->get($this->_table);
      $this->__numRows = $query->num_rows();

      return ($this->returnArray) ? $query->result_array() : $query->result();
    }

    /**
   * Return a single row as a resultset array with specified fields from database matching given conditions.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return single row either in array or in object based on model config
   * @access public
   */

    function find($conditions = NULL, $fields = '*', $order = NULL)
    {
      $data = $this->findAll($conditions, $fields, $order, 0, 1);

      if ($data)
      {
            return $data;
      }
      else
      {
            return false;
      }
    }

    /**
   * Returns contents of a field in a query matching given conditions.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return string the value of the field specified of the first row
   * @access public
   */

    function field($conditions = null, $name, $fields = '*', $order = NULL)
    {
      $data = $this->findAll($conditions, $fields, $order, 0, 1);

      if ($data)
      {
            $row = $data;

            if (isset($row[$name]))
            {
                return $row[$name];
            }
            else
            {
                return false;
            }
      }
      else
      {
            return false;
      }

    }

    /**
   * Returns number of rows matching given SQL condition.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return integer the number of records returned by the condition
   * @access public
   */

    function findCount($conditions = null)
    {
      $data = $this->findAll($conditions, 'COUNT(*) AS count', null, 0, 1);

      if ($data)
      {
            return $data['count'];
      }
      else
      {
            return false;
      }
    }

    /**
   * Returns a key value pair array from database matching given conditions.
   *
   * Example use: generateList(null, '', 0. 10, 'id', 'username');
   * Returns: array('10' => 'emran', '11' => 'hasan')
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return array a list of key val ue pairs given criteria
   * @access public
   */

    function generateList($conditions = null, $order = 'id ASC', $start = 0, $limit = NULL, $key = null, $value = null)
    {
      $data = $this->findAll($conditions, "$key, $value", $order, $start, $limit);

      if ($data)
      {
            foreach ($data as $row)
            {
                $keys[] = ($this->returnArray) ? $row[$key] : $row->$key;
                $vals[] = ($this->returnArray) ? $row[$value] : $row->$value;
            }

            if (!empty($keys) && !empty($vals))
            {
                $return = array_combine($keys, $vals);
                return $return;
            }
      }
      else
      {
            return false;
      }
    }

    /**
   * Returns an array of the values of a specific column from database matching given conditions.
   *
   * Example use: generateSingleArray(null, 'name');
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return array a list of key value pairs given criteria
   * @access public
   */

    function generateSingleArray($conditions = null, $field = null, $order = 'id ASC', $start = 0, $limit = NULL)
    {
      $data = $this->findAll($conditions, "$field", $order, $start, $limit);

      if ($data)
      {
            foreach ($data as $row)
            {
                $arr[] = ($this->returnArray) ? $row[$field] : $row->$field;
            }

            return $arr;
      }
      else
      {
            return false;
      }
    }

    /**
   * Initializes the model for writing a new record.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return boolean True
   * @access public
   */

    function create()
    {
      $this->id = false;
      unset ($this->data);

      $this->data = array();
      return true;
    }

    /**
   * Returns a list of fields from the database and saves in the model
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return array Array of database fields
   * @access public
   */

    function read($id = null, $fields = null)
    {
      if ($id != null)
      {
            $this->id = $id;
      }

      $id = $this->id;

      if ($this->id !== null && $this->id !== false)
      {
            $this->data = $this->find($this->primaryKey . ' = ' . $id, $fields);
            return $this->data;
      }
      else
      {
            return false;
      }
    }

    /**
   * Inserts a new record in the database.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return boolean success
   * @access public
   */

    function insert($data = null)
    {
      if ($data == null)
      {
            return FALSE;
      }

      $this->data = $data;
      $this->data['create_date'] = date("Y-m-d H:i:s");

      foreach ($this->data as $key => $value)
      {
            if (array_search($key, $this->fields) === FALSE)
            {
                unset($this->data[$key]);
            }
      }

      $this->db->insert($this->_table, $this->data);

      $this->__insertID = $this->db->insert_id();
      return $this->__insertID;
    }

    /**
   * Saves model data to the database.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return boolean success
   * @access public
   */

    function save($data = null, $id = null)
    {
      if ($data)
      {
            $this->data = $data;
      }

      foreach ($this->data as $key => $value)
      {
            if (array_search($key, $this->fields) === FALSE)
            {
                unset($this->data[$key]);
            }
      }

      if ($id != null)
      {
            $this->id = $id;
      }

      $id = $this->id;

      if ($this->id !== null && $this->id !== false)
      {
            $this->db->where($this->primaryKey, $id);
            $this->db->update($this->_table, $this->data);

            $this->__affectedRows = $this->db->affected_rows();
            return $this->id;
      }
      else
      {
            $this->db->insert($this->_table, $this->data);

            $this->__insertID = $this->db->insert_id();
            return $this->__insertID;
      }
    }

    /**
   * Removes record for given id. If no id is given, the current id is used. Returns true on success.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return boolean True on success
   * @access public
   */

    function remove($id = null)
    {
      if ($id != null)
      {
            $this->id = $id;
      }

      $id = $this->id;

      if ($this->id !== null && $this->id !== false)
      {
            if ($this->db->delete($this->_table, array($this->primaryKey => $id)))
            {
                $this->id = null;
                $this->data = array();

                return true;
            }
            else
            {
                return false;
            }
      }
      else
      {
            return false;
      }
    }

    /**
   * Returns a resultset for given SQL statement. Generic SQL queries should be made with this method.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return array Resultset
   * @access public
   */

    function query($sql)
    {
      return $this->db->query($sql);
    }

    /**
   * Returns the last query that was run (the query string, not the result).
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return string SQL statement
   * @access public
   */

    function lastQuery()
    {
      return $this->db->last_query();
    }

    /**
   * This function simplifies the process of writing database inserts. It returns a correctly formatted SQL insert string.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return string SQL statement
   * @access public
   */

    function insertString($data)
    {
      return $this->db->insert_string($this->_table, $data);
    }

    /**
   * Returns the current record's ID.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return integer The ID of the current record
   * @access public
   */

    function getID()
    {
      return $this->id;
    }

    /**
   * Returns the ID of the last record this Model inserted.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return int
   * @access public
   */

    function getInsertID()
    {
      return $this->__insertID;
    }

    /**
   * Returns the number of rows returned from the last query.
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return int
   * @access public
   */

    function getNumRows()
    {
      return $this->__numRows;
    }

    /**
   * Returns the number of rows affected by the last query
   *
   * @author md emran hasan <emran@rightbrainsolution.com>
   * @return int
   * @access public
   */

    function getAffectedRows()
    {
      return $this->__affectedRows;
    }

}
// END Model Class

吃货 发表于 2013-7-31 14:13:26

这个是我继承的model
<?phpif (!defined('BASEPATH')) exit('No direct script access allowed');
/*使用举例:
*
*比如我们建一个 product 的 model
*
*
*/



class Product extends MY_Model {

    function __construct()
    {
      // Call the Model constructor
      parent::__construct();      
      $this->load->database();
    }

}

?>

吃货 发表于 2013-7-31 14:18:32

手册上说放在application/libraries/xxxx.php目录下,我方在这个目录下报这个错误 ! ) Fatal error: Class 'MY_Model' not found in C:\wamp\www\app\application\models\product.php on line 而放在application/lcore/xxxx.php目录下就可以,为什么呢?

dren_a 发表于 2013-7-31 15:18:08

你扩展的模块放在库目录下。。。

浪迹天涯 发表于 2013-7-31 17:00:52

放在application/core目录下

吃货 发表于 2013-7-31 20:37:17

浪迹天涯 发表于 2013-7-31 17:00 static/image/common/back.gif
放在application/core目录下

那手册写的放在application/libraries下

吃货 发表于 2013-7-31 20:37:36

dren_a 发表于 2013-7-31 15:18 static/image/common/back.gif
你扩展的模块放在库目录下。。。

是CORE下吧。。。

浪迹天涯 发表于 2013-8-5 10:50:22

吃货 发表于 2013-7-31 20:37 static/image/common/back.gif
那手册写的放在application/libraries下

http://codeigniter.org.cn/user_guide/general/core_classes.html
页: [1]
查看完整版本: CI扩展类的问题求助各位大神