Models (แบบจำลอง)
Model (แบบจำลอง) เป็นทางเลือกสำหรับผู้ที่ต้องการใช้รูปแบบ MVC แบบดั้งเดิม
- อะไรคือ Model (แบบจำลอง)?
- กายวิภาคของ Model (แบบจำลอง)
- การโหลด Model (แบบจำลอง)
- การโหลด Model (แบบจำลอง) โดยอัติโนมัติ
- การติดต่อกับฐานข้อมูล
อะไรคือ 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 (แบบจำลอง)ถูกโหลดแล้ว มันจะไม่ติดต่อกับฐานข้อมูลให้คุณโดยอัติโนมัติ ตัวเลือกข้างล่างนี้เป็นวิธีการติดต่อกับฐานข้อมูลที่คุณสามารถเลือกทำได้:
- คุณสามารถติดต่อได้โดยการใช้เมธอดมาตรฐานต่างๆ ซึ่งได้บรรยายไว้ที่นี่แล้ว สามารถทำได้ทั้งในคลาส Controller (ตัวควบคุม)หรือคลาส Model (แบบจำลอง)
- คุณสามารถกำหนดให้ model (แบบจำลอง)โหลดฟังก์ชันในการติดต่อกับฐานข้อมูลโดยอัติโนมัติได้โดยส่งค่า TRUE (บูลีน)ผ่านพารามิเตอร์ตัวที่สาม แล้การตั้งค่ากิจกรรมต่างๆในการติดต่อกับฐานข้อมูลที่คุณตั้งค่าเอาไว้ในไฟล์ config จะถูกใช้:
$this->load->model('Model_name', '', TRUE); - คุณสามารกำหนดกิจกรรมต่างๆที่ใช้ในการติดต่อกับฐานข้อมูลด้วยตัวคุณเองผ่านพารามิเตอร์ตัวที่สามดังนี้:
$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);