คู่มือการใช้งาน CodeIgniter เวอร์ชั่น 1.7.2


Models (แบบจำลอง)

Model (แบบจำลอง) เป็นทางเลือกสำหรับผู้ที่ต้องการใช้รูปแบบ MVC แบบดั้งเดิม

อะไรคือ Model (แบจำลอง)?

Model (แบบจำลอง)คือคลาสต่างๆที่ออกแบบมาเพื่อให้ทำงานกับข้อมูลในฐานข้อมูล ตัวอย่าง สมมติว่าคุณนำ CodeIgniter มาเป็นตัวจัดการกับบล๊อค (blog)ของคุณ คุณมีคลาส model (แบบจำลอง)ที่มีฟังก์ชันต่างๆสำหรับ แทรก, ปรับปรุง, และรับข้อมูลที่ออกมาจากฐานข้อมูล หน้าตาของ model (แบบจำลอง) ก็จะออกมาแบบดังตัวอย่างต่อไปนี้: class Blogmodel extends Model {

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

    function Blogmodel()
    {
        // Call the Model constructor
        parent::Model();
    }
    
    function get_last_ten_entries()
    {
        $query = $this->db->get('entries', 10);
        return $query->result();
    }

    function insert_entry()
    {
        $this->title   = $_POST['title']; // please read the below note
        $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']));
    }

}

หมายเหตุ: ฟังก์ชันด้านบนนั้นใช้ฟังก์ชันฐานข้อมูลแบบ Active Record

หมายเหตุ: ตัวอย่างข้างต้นเราใช้ $_POST เข้าถึงโดยตรง ซึ่งมันเป็นการปฏิบัติที่ไม่ดีนัก โดยปกติ(่ที่ดี)เราจะใช้ คลาสรับข้อมูล ก็จะเป็น $this->input->post('title')

กายวิภาคของ Model (แบบจำลอง)

คลาสต่างๆของ model (แบบจำลอง)จะเก็บไว้ใน application/models/ ซึ่งสามารถสร้างโฟลเดอร์ย่อยไว้ในนี้ได้ ถ้าคุณต้องการการจัดการลักษณะนี้

ต้นแบบของคลาส model (แบบจำลอง)คือแบบนี้: class Model_name extends Model {

    function Model_name()
    {
        parent::Model();
    }
}

Model_name เป็นชื่อของคลาส model (แบบจำลอง) ชื่อของคลาสต้องขึ้นต้นด้วยตัวใหญ่แล้วตามด้วยตัวเล็ก แล้วอย่าลืมขยาย (extends)คลาสของคุณ มาจากคลาส Model (แบบจำลอง)ด้วยนะ

ชื่อไฟล์ก็ควรจะเป็นชื่อที่เหมือนกับของคลาสแต่ให้เป็นตัวเล็กหมดแทน ดังตัวอย่างนี้ ถ้าคลาสของคุณเ็ป็นแบบนี้: class User_model extends Model {

    function User_model()
    {
        parent::Model();
    }
}

ไฟล์ของคุณก็จะเป็นแบบนี้:application/models/user_model.php

การโหลด Model (แบบจำลอง)

ปกติแล้ว model จะถูกโหลดด้วยฟังก์ชันของ controller(ตัวควบคุม) คุณจะใช้ฟังก์ชันดังด้านล่างนี้สำหรับการโหลด model (แบบจำลอง):$this->load->model('Model_name');

ถ้า model (แบบจำลอง)ของคุณเก็บไว้ในโฟลเดอร์ย่อย ให้คุณระบุชื่อโฟลเดอร์นั้นไปด้วย ดังตัวอย่าง ถ้าคุณมี model (แบบจำลอง)ที่อยู่ใน application/models/blog/queries.php คุณจะโหลด model (แบบจำลอง)โดยเขียนแบบนี้:$this->load->model('blog/queries');

แต่ก่อนที่จะโหลดเสร็จ คุณอาจจะเรียกฟังก์ชันใน model (แบบจำลอง)ของคุณโดยใช้วัตถุที่ชื่อเดียวกับคลาส model (แบบจำลอง)ของคุณเอง: $this->load->model('Model_name');

$this->Model_name->function();

ถ้าคุณต้องการระบุชื่อวัตถุที่เป็น model (แบบจำลอง)ไม่ให้เหมือนกับชื่อคลาสคุณสามารถกำหนดชื่อที่คุณต้องการเองได้ไว้ในพารามิเตอร์ตัวที่สองดังนี้: $this->load->model('Model_name', 'fubar');

$this->fubar->function();

นี่เป็นตัวอย่างของ controller (ตัวควบคุม)ที่โหลด model (แบบจำลอง)แล้วก็โหลด view (ส่วนแสดง): class Blog_controller extends Controller {

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

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

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

การโหลด Model (แบบจำลอง)โดยอัติโนมัติ

ถ้าคุณพบว่าคุณต้องการ model (แบบจำลอง)ที่คุณต้องการใช้ตลอดแอพพลิเคชันของคุณ คุณสามารถกำหนดให้ CodeIgniter โหลด model (แบบจำลอง)โดยอัติโนมัติระหว่างกระบวนการเริ่มต้น วิธีการนี้ทำได้โดยเปิดไฟล์ application/config/autoload.php ขึ้นมา แล้วก็เพิ่ม model (แบบจำลอง)ที่คุณต้องการให้โหลดโดยอัติโนมัติใส่ในอาเรย์ ตัวอย่างเช่น$autoload['model'] = array('blog/queries');

การติดต่อกับฐานข้อมูล

เมื่อ model (แบบจำลอง)ถูกโหลดแล้ว มันจะไม่ติดต่อกับฐานข้อมูลให้คุณโดยอัติโนมัติ ตัวเลือกข้างล่างนี้เป็นวิธีการติดต่อกับฐานข้อมูลที่คุณสามารถเลือกทำได้: