Model

Model一開始並不會自動與資料庫連接,需要由程式決定何時連接,或是設置自動連接。

載入Model

如何自動載入Model?

# application/config/autoload.php
/*
| -------------------------------------------------------------------
|  Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
|    $autoload['model'] = array('model1', 'model2');
|
*/

$autoload['model'] = array();

如何建立資料庫連線?

$this->load->database();

如何手動載入Model?

$this->load->model('Model_name', '', TRUE);

如何預載Model?

$this->load->model('Model_name');

如何使用Model?

$this->Model_name->function();

如何載入不同的資料庫連線?

$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;

$this->load->model('Model_name', '', $config);

Example

例子的函數中使用了Active Record資料庫函數,使用 Active Record 功能的重大的益處是它允許你建立不依賴特定資料庫的應用程式,所有的值都會由系統自動跳脫(escape), 它也讓查詢更安全,預防SQL Injection

# application/model/BlogModel.php
class BlogModel extends CI_Model {

    var $title   = '';
    var $content = '';
    var $date    = '';

    function __construct()
    {
        // 呼叫模型(Model)的建構函數
        parent::__construct();
    }

    function get_last_ten_entries()
    {
        $query = $this->db->get('entries',10);
        return $query->result();
    }

    function insert_entry()
    {
        $this->title   = $_POST['title']; // 請看一下下面的注意事項
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->insert('entries', $this);
    }

    function update_entry()
    {
        $this->title   = $_POST['title'];
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->update('entries', $this,array('id' => $_POST['id']));
    }

}

因應簡化直接使用$_POST變數,一般不是這樣使用。

在Controller運用Model

# application/controller/Blog.php
class Blog_controller extends CI_Controller {

    function blog()
    {
        $this->load->model('BlogModel', 'Blog');

        $data['query'] = $this->Blog->get_last_ten_entries();

        $this->load->view('blog',$data);
    }
}

$data['query'] query這個key改為result會比較適當

Last updated