Model จัดการกับข้อมูลรูปแบบต่างๆ
Model ตามคอนเซ็ปต์ของ MVC ก็คือส่วนที่ใช้ติดต่อกับฐานข้อมูลของ MVC ซึ่ง Model จะทำหน้าที่เป็นตัวกลางในการติดต่อกับฐานข้อมูลซึ่งอาจมีได้หลากหลายชนิด เช่น MySQL Oracle MSSQL หรือแม้กระทั่งฐานข้อมูลรูปแบบอื่นๆ ให้เป็นรูปแบบที่ MVC เข้าใจและสามารถนำไปใช้งานได้ทันที
เมื่อไรที่ต้องการข้อมูล ให้เราไปเรียกข้อมูลเอาจาก Model ซึ่งการร้องขอข้อมูลนี้อาจเกิดขึ้นที่ใดก็ได้เช่น Controller ร้องขอข้อมูลจาก Model, View หรือแม้กระทั่ง Model ก็ยังร้องขอข้อมูลจาก Model อื่นๆได้ด้วยเหมือนกัน
การสร้าง Model สำหรับคชสารจะมี Model หลักๆอยู่สองแบบ
สร้างไฟล์ modules/index/models/index.php และใส่โค้ดตามด้านบน ซึงจะเห็นว่าคลาสนี้สืบทอดมาจาก Kotchasan\Model ซึ่งเป็น Model มาตรฐานทั่วไป และได้ชื่อคลาสใหม่ที่สร้างขึ้นมาว่า Index\Index\Model ซึ่งในโมเดลนี้เราจะต้องเขียนคำสั่งเพื่อจัดการ Query ต่างๆด้วยตัวเอง
การสร้างโมเดลตามด้านบน ไม่ได้เจาะจงว่าจะต้องสร้างขึ้นเพื่อใช้กับตารางใดตารางหนึ่งเท่านั้น แต่เป็นการสร้าง Model ให้สัมพันธ์กับไฟล์ที่จะเรียกใช้โมเดล เช่น สร้าง Index\Index\Model ขึ้นมาเพื่อเก็บคำสั่งที่ Index\Index\Controller จะเรียกใช้ฐานข้อมูลเป็นต้น สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับโมเดลประเภทนี้จะอธิบายเพิ่มเติมในหัวข้อเกี่ยวกับ Database
โมเดลประเภทนี้จะผูกกับตารางใดตารางหนึ่งเป็นหลัก และจะต้องมีการระบุชื่อตารางที่เกี่ยวข้องเสมอ โมเดลนี้จะมีลักษณะเป็นตัวแทนข้อมูลของตาราง ซึ่งเมื่อมีการสร้างขึ้นหรือเรียกใช้จะเหมือนกับกระทำกับข้อมูลของตารางโดยตรง
นอกจากนี้โมเดลประเภทนี้ยังสามารถตั้งค่าเพื่อทำการสร้างตารางเสมือน เป็นตัวแทนของข้อมูลที่ต้องการได้อีกด้วย (เหมือนการสร้าง VIEW ใน MySQL) สำหรับรายละเอียดของโมเดลประเภทนี้ให้ดูที่ Recordset
ในการสร้างโมเดล ก่อนการใช้งานจะต้องมีการเชื่อมต่อกบฐานข้อมูลก่อนเสมอ โดยที่ตัวโมเดลเมื่อถูกสร้างขึ้นมันจะทำการเชื่อมต่อกับฐานข้อมูลให้โดยอัตโนมัติ ดังนั้นเราจำเป็นต้องมีการตั้งค่าการเชื่อมต่อที่ settengs/database.php ร่วมด้วย
เมื่อไรที่ต้องการข้อมูล ให้เราไปเรียกข้อมูลเอาจาก Model ซึ่งการร้องขอข้อมูลนี้อาจเกิดขึ้นที่ใดก็ได้เช่น Controller ร้องขอข้อมูลจาก Model, View หรือแม้กระทั่ง Model ก็ยังร้องขอข้อมูลจาก Model อื่นๆได้ด้วยเหมือนกัน
การสร้าง Model สำหรับคชสารจะมี Model หลักๆอยู่สองแบบ
namespace Index\Index;
class Model extends \Kotchasan\Model
{
// เขียน method ของ Model ที่ต้องการที่นี่
}
สร้างไฟล์ modules/index/models/index.php และใส่โค้ดตามด้านบน ซึงจะเห็นว่าคลาสนี้สืบทอดมาจาก Kotchasan\Model ซึ่งเป็น Model มาตรฐานทั่วไป และได้ชื่อคลาสใหม่ที่สร้างขึ้นมาว่า Index\Index\Model ซึ่งในโมเดลนี้เราจะต้องเขียนคำสั่งเพื่อจัดการ Query ต่างๆด้วยตัวเอง
การสร้างโมเดลตามด้านบน ไม่ได้เจาะจงว่าจะต้องสร้างขึ้นเพื่อใช้กับตารางใดตารางหนึ่งเท่านั้น แต่เป็นการสร้าง Model ให้สัมพันธ์กับไฟล์ที่จะเรียกใช้โมเดล เช่น สร้าง Index\Index\Model ขึ้นมาเพื่อเก็บคำสั่งที่ Index\Index\Controller จะเรียกใช้ฐานข้อมูลเป็นต้น สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับโมเดลประเภทนี้จะอธิบายเพิ่มเติมในหัวข้อเกี่ยวกับ Database
หมายเหตุ เราสามารถเรียกใช้โมเดลใดๆบนคอนโทรลเลอร์ใดๆ ก็ได้นะครับ ไม่ได้จำกัดว่าจะต้องเรียกเฉพาะโมเดลของตัวเองเท่านั้น
โมเดลแบบที่สอง สืบทอดมาจาก Kotchasan\Orm\Fieldnamespace Index\Index;
class Model extends \Kotchasan\Orm\Field
{
/**
* ชื่อตาราง
*
* @var string
*/
protected $table = 'index I';
// เขียน method ของ Model ที่ต้องการที่นี่
}
โมเดลประเภทนี้จะผูกกับตารางใดตารางหนึ่งเป็นหลัก และจะต้องมีการระบุชื่อตารางที่เกี่ยวข้องเสมอ โมเดลนี้จะมีลักษณะเป็นตัวแทนข้อมูลของตาราง ซึ่งเมื่อมีการสร้างขึ้นหรือเรียกใช้จะเหมือนกับกระทำกับข้อมูลของตารางโดยตรง
นอกจากนี้โมเดลประเภทนี้ยังสามารถตั้งค่าเพื่อทำการสร้างตารางเสมือน เป็นตัวแทนของข้อมูลที่ต้องการได้อีกด้วย (เหมือนการสร้าง VIEW ใน MySQL) สำหรับรายละเอียดของโมเดลประเภทนี้ให้ดูที่ Recordset
ในการสร้างโมเดล ก่อนการใช้งานจะต้องมีการเชื่อมต่อกบฐานข้อมูลก่อนเสมอ โดยที่ตัวโมเดลเมื่อถูกสร้างขึ้นมันจะทำการเชื่อมต่อกับฐานข้อมูลให้โดยอัตโนมัติ ดังนั้นเราจำเป็นต้องมีการตั้งค่าการเชื่อมต่อที่ settengs/database.php ร่วมด้วย