ภาพประกอบ : insert zend

ZEND FRAMEWORK วิธีการ Insert ข้อมูลลง Database

การใช้งานฐานข้อมูลของ zend ถ้าไม่ได้มีรายละเอียดอะไรเยอะมากนักก็เรียกได้ว่า ่งายมาก กันได้เลยทีเดียว เพราะ framework แต่ละตัวจะเน้นไปที่การทำงานให้เราสะดวกขึ้นนั้นเอง ส่วนเรื่องของการ insert ข้อมูลลง database นั้น zend เองก็เตรียมไว้ให้เราใช้งานแบบง่ายๆไว้ด้วยครับ มาลองดูวิธีกัน

ZEND FRAMEWORK Insert into

ภาพประกอบ : insert zend

ภาพประกอบ : insert zend

ครั้งแรกที่ผมจะพูดถึงการนำเอาข้อมูลใส่ลงไปในฐานข้อมูลผมจะขอแบบพื้นๆก่อนก็แล้วกันนะครับ โดยผมจะใช้วิธีส่งค่าแบบ MVC จริงๆเลยจะได้เห็นว่าการทำงานของ MVC นั้นเป็นอย่างไร

เริ่มจากเรามาเตรียมข้อมูลสำหรับใส่เข้าไปในตารางกันก่อนนะครับ ผมจะใช้งานเป็น array ซักชุดโดยใช้งานร่วมกับ table ที่ชื่อว่า customer ของสัปดาห์ที่แล้วแหละกัน ก็จะมีข้อมูลตามนี้ครับ

  1. first_name
  2. last_name
  3. email
  4. country
  5. ip_address

ส่วนตารางจริงๆจะเป็นแบบนี้ครับ

ภาพประกอบ : ข้อมูลในตารางตัวอย่าง

ภาพประกอบ : ข้อมูลในตารางตัวอย่าง

ทีนี้ผมจะสร้าง Action ขึ้นมา 1 action ในส่วนของ index controller นะครับใช้ชื่อว่า add customer

public function addcustomerAction()
{
// set data to save
$aFormData = array();
$aFormData['first_name'] = "manow";
$aFormData['last_name'] = "rejit";
$aFormData['email'] = "[email protected]";
$aFormData['country'] = "Thailand";
$aFormData['ip_address'] = "192.168.1.1";
}

รายละเอียดด้านในนะครับ ผมจะเริ่มจากการสร้าง Array สำหรับเก็บข้อมูลที่จะบันทึกใช้ชื่อว่า $aFormData แล้วเก็บข้อมูลเอา จากนั้นผมก็จะไปสร้าง Model เพื่อทำการบันทึกข้อมูลลงไปในฐานข้อมูลกันโดยจะใช้ชื่อว่า save ง่ายๆเลยนะครับ ส่วน model นั้นผมจะสร้างต่อจากคราวที่แล้วที่ใช้ชื่อว่า  CustomerTbl นั้นแหละครับ

ตัว Model ครั้งที่แล้ว

class Application_Model_DbTable_CustomerTbl extends Zend_Db_Table_Abstract
{
 protected $_name = 'customer_tbl';
 
 public function viewAllCustomer()
 {
 
 }
 
}
public function save($data)
{
// initial table
$oCustomerTbl = new Application_Model_DbTable_CustomerTbl();
// SQL Query
$oCustomerTbl->insert($data);
}

ในคราวนี้ผมทำการเรียก class ของ model ขึ้นมาใช้งานซึ่งก็ทำไว้ในไฟล์เดียวกันกับตัว model เลยครับแล้วผมก็จะเลือกใช้คำสั่ง insert เพื่อเรียกใช้ function บันทึกข้อมูลลงไปในฐานข้อมูลโดยเอาข้อมูล $data มาใส่

ทีนี้เราต้องส่งค่ามาจาก controller เพื่อที่จะเข้าไป save ครับ เราจะต้องเรียก model นี้ผ่านทาง controller อีกทีแบบนี้ครับ

// initial table
$oCustomerTbl = new Application_Model_DbTable_CustomerTbl();

บรรทัดแรกนี้สำหรับการเรียก class ของ model ขึ้นมาใช้งานนะครับ จะเห็นว่าผมเรียกมาแบบปรกติเลยทั้ง model และ controller เรียกเหมือนกันไปเลย เข้าใจง่ายดี

// call function save
$addCustomer = $oCustomerTbl->save($aFormData);

จากนั้นผมก็เอาบรรทัดสุดท้ายนี้มาเรียก function save โดยเอาข้อมูลใน form ส่งกลับไปเป็น parameter ด้วยเพื่อให้ทาง model เอาไปใช้งานนั้นแหละครับ พอลอง save จริงๆก็ได้มาแบบนี้

ภาพประกอบ : save

ภาพประกอบ : save

แต่ในส่วนของ Model หากเราไม่ต้องการเรียก table แล้วตามด้วย function insert แบบในตัวอย่างเรายังสามารถเรียกได้โดยการใช้ parent อีกนะครับ แบบนี้

public function save($data)
{
return parent::insert($data);
}

ซึ่งก็จะง่ายและสั้นมากขึ้น แต่เวลาที่เราเอาไปใช้งานจริงๆมันยังไม่ควรใช้การ save ตรงๆแบบนี้นะครับ อันนี้เป็นแค่วิธีการให้รู้จักเท่านั้น เพราะเวลา save จริงๆอย่างน้อยๆเราควรใช้งาน Transaction จะดีกว่าจะได้ทำการตรวจสอบข้อมูลก่อนด้วยนะครับ ไว้เดี๋ยวครั้งหน้ามาดูการ บันทึกแบบส่งค่ามากจาก form กับการใช้งาน Transaction กันบ้างครับ

บทความก่อนหน้า Zend Framework วิธีการเชื่อมต่อกับ Database MySQL

อ้างอิง http://framework.zend.com/manual/1.12/en/zend.db.table.html