เริ่มต้นใช้งานฐานข้อมูล
ก่อนที่จะมีการใช้งานฐานข้อมูลของคชสาร จะต้องมีการตั้งค่าการเชื่อมต่อฐานข้อมูลก่อน โดยจะมีการตั้งค่าที่ไฟล์ settings/database.php
ระบบฐานข้อมูลของคชสารสามารถเชื่อมต่อกับฐานข้อมูลได้หลายๆตัวพร้อมกัน (ขึ้นกับ Engine ของฐานข้อมูลที่นำมาใช้) โดยที่ฐานข้อมูลแต่ละตัวที่จะนำมาใช้จะมีการกำหนดค่าการเชื่อมต่อของตัวเอง ผมจะอธิบายการเชื่อมต่อเฉพาะที่การเชื่อมต่อชุดที่หนึ่งเท่านั้น โดยที่การเชื่อมต่อในชุดที่สองจะมีคำอธิบายเหมือนๆกัน
ส่วนของ tables ใช้สำหรับระบุรายชื่อของตาราง มีรูปแบบ
ซึ่งจะได้ผลลัพท์เมื่อมีการเรียกชื่อตาราง เช่น เมื่อเรียก $model->getTableName('ชื่อรอง1') จะได้ผลลัพท์เป็น prefix + _ + ชื่อตาราง1 (หรือ prefix_ชื่อตาราง1) นั่นเอง
Engine ที่เกี่ยวกับฐานของมูลของคชสารแบ่งออกเป็น 3 รูปแบบ
/* settings/database.php */
return array(
/* ค่ากำหนดการเชื่อมต่อชุดที่ 1 */
'mysql' => array(
'dbdriver' => 'mysql',
'username' => 'root',
'password' => '',
'dbname' => 'database_name',
'hostname' => 'localhost',
'port' => 3306,
'prefix' => 'my'
),
/* ค่ากำหนดการเชื่อมต่อ ชุดที่ 2 */
'connection2' => array(
'dbdriver' => 'mysql',
'username' => 'username2',
'password' => 'password2',
'dbname' => 'dbname2',
'hostname' => 'localhost',
'port' => 3306,
'prefix' => 'prefix2'
),
/* รายชื่อตารางฐานข้อมูล และ ชื่อรอง */
'tables' => array(
'user' => 'users',
'table2' => 'table2_name'
)
);
ระบบฐานข้อมูลของคชสารสามารถเชื่อมต่อกับฐานข้อมูลได้หลายๆตัวพร้อมกัน (ขึ้นกับ Engine ของฐานข้อมูลที่นำมาใช้) โดยที่ฐานข้อมูลแต่ละตัวที่จะนำมาใช้จะมีการกำหนดค่าการเชื่อมต่อของตัวเอง ผมจะอธิบายการเชื่อมต่อเฉพาะที่การเชื่อมต่อชุดที่หนึ่งเท่านั้น โดยที่การเชื่อมต่อในชุดที่สองจะมีคำอธิบายเหมือนๆกัน
- dbdriver คือชื่อ Driver ที่ใช้ในการเชือ่มต่อของฐานข้อมูล PDO เช่น mysql หมายถึงการเชื่อมต่อกับ PDO MySQL Driver
- username,password ชื่อผู้ใช้และรหัสผ่านของฐานข้อมูล
- dbname ชื่อฐานข้อมูล
- hostname ชื่อโฮสต์ของฐานข้อมูล ปกติแล้วจะระบุเป็น localhost หรือ IP Address
- port หมายเลขพอร์ต ค่าปกติของ MySQL คือ 3306
- prefix เป็นคำนำหน้าชื่อตาราง ใช้เพื่อแยกตารางออกจากกัน หากมีการใช้ฐานข้อมูลร่วมกับโปรแกรมอื่น ถ้ากำหนดค่าจะได้ชื่อตารางเป็น prefix_tablename (มี _ คั่น) แต่ถ้ากำหนดเป็นค่าว่างจะได้ชื่อตารางเป็น tablename
ส่วนของ tables ใช้สำหรับระบุรายชื่อของตาราง มีรูปแบบ
'tables' => array (
'ชื่อรอง1' => 'ชื่อตาราง1'
'ชื่อรอง2' => 'ชื่อตาราง2'
)
ซึ่งจะได้ผลลัพท์เมื่อมีการเรียกชื่อตาราง เช่น เมื่อเรียก $model->getTableName('ชื่อรอง1') จะได้ผลลัพท์เป็น prefix + _ + ชื่อตาราง1 (หรือ prefix_ชื่อตาราง1) นั่นเอง
Engine ที่เกี่ยวกับฐานของมูลของคชสารแบ่งออกเป็น 3 รูปแบบ
- แบบพื้นฐาน CRUD (Create Read Update Delete) เป็นการใช้งานแบบพื้นฐานที่สุดของระบบฐานข้อมูล โดยที่การใช้งาน CRUD จะเป็นการใช้งาน Object ของฐานข้อมูลโดยตรง ดังนั้นมันจึงมีความสามารถกว้างขวางมาก สามารถทำได้ทุกอย่างที่ฐานข้อมูลทำได้ และมีความเร็วสูงที่สุด แต่เนื่องจากมันกระทำกับ Object กับฐานข้อมูลโดยตรง ทำให้รูปแบบและวิธีการเขียนคำสั่งจะขึ้นกับ Driver ที่เลือกใช้ในการเชื่อมต่อกับฐานข้อมูล
- แบบที่สอง QueryBuilder ชื่อก็บอกว่าเป็นเครื่องมือสำหรับการสร้าง Query มันจะทำหน้าที่เป็นตัวกลางคั่นระหว่างผู้ใช้และ CRUD โดยอนุญาติให้เราเขียนคำสั่งในแบบที่เราคุ้นเคย และ QueryBuilder จะทำการแปลงคำสั่งให้เป็นรูปแบบที่ฐานข้อมูลแต่ละตัวต้องการ ซึ่งแน่นอนว่ามันจะช่วยให้เขียนง่ายขึ้น และการเปลี่ยนไปใช้งานฐานข้อมูลอื่นๆทำได้ง่ายแค่การเปลี่ยนไดร์เวอร์ แต่ก็ยังมีข้อจำกัดในการใช้งานคำสั่งที่ซับซ้อน ที่อาจไม่สามารถทำได้ แต่อย่างไรก็ตามในกรณีที่ต้องใช้งานคำสั่งที่ซับซ้อนก็ยังสามารถเขียนคำสั่งเพิ่มเติมโดยใช้ CRUD ได้
- แบบที่สาม คือ Recordset ถูกออกแบบโดยการมองฐานข้อมูลเป็น Object หนึ่ง (อาจมีชื่อเรียกแตกต่างกันในเฟรมเวิร์คอื่นๆ เช่น ORM ย่อมาจาก Object Relational Mapping) โดยที่ในการเรียกข้อมูลจะใช้วิธีแบบ Object ในการเข้าถึงข้อมูลแทนการเขียนคำสั่ง SQL เช่น $rs->find($id) หมายถึงการเรียกข้อมูลที่ $id ทำให้ไม่ต้องจดจำคำสั่งของ SQL เลย ข้อดีที่สำคัญของ Recordset คือสามารถตั้งค่าให้ทำการสร้าง ตารางเสมือน (View) ได้แต่มีประสิทธิภาพดีกว่าการสร้าง View บนฐานข้อมูล แต่ก็มีข้อเสียเหมือน QueryBuilder ที่ไม่สามารถทำคำสั่งที่ซับซ้อนได้ และยังช้ากว่า QueryBuilder อีก