codeigniter

Codeigniter วิธี Select data ด้วย active record

Codeigniter เองก็มี Active Record  ซึ่งนับว่าเป็นเครื่องมือชั้นดีของ PHP Framework ทั่วๆไปพึ่งจะมีให้กับนักพัฒนาได้ใช้ เพื่อให้สะดวกในการเข้าถึงฐานข้อมูลและสั้น กระชับ เป็น pattern ที่เข้าใจง่าย ไม่ซับซ้อน

codeigniter

codeigniter

วิธี Select data ด้วย active record

หลังจากที่เราได้เคยรู้จักกับเรื่องของการทำงานกับฐานข้อมูลแบบ Query กันตรงๆไปบ้างแล้ว วันนี้เราจะมาลองดูเรื่องของการทำงานกับฐานข้อมูลในรูปแบบของ Active Record กันบ้างซึ่งทาง CI ก็เตรียมไว้ให้เราใช้งานอย่างง่ายๆ สั้น กระชับ การทำงานบ้างอย่างดูเข้าใจง่ายกว่าเดิมขึ้นตั้งเยอะ เดี๋ยวเรามาลองทำความเข้าใจกันดูครับ

ก่อนอื่นเลยขอให้ดูตัวอย่างฐานข้อมูลกันก่อนแล้วกันนะครับ

database สำหรับ codeigniter

database สำหรับ codeigniter

เริ่มต้นด้วยการ Select แบบธรรมดาทั่วๆไปก่อน SELECT ALL

แบบแรกผมจะดึงข้อมูลทุกอย่างออกมาจากฐานข้อมูลแบบไม่มีเว้นอะไรใดๆเอาไว้เลยนะครับ เรียกว่าเจออะไรก็เอามาหมดเลยนั้นแหละเพื่อให้เห็นภาพว่า วิธีการใช้งาน Active Record นั้นเข้ามาช่วยเราได้อย่างไรบ้าง

SQL : Old Style
$query = "SELECT * FROM customer_tbl";
$customer = $this->db->query($query)->result();
Active : Style
$query = $this->db->get('customer_tbl')->result();

อันนี้จะให้เห็นนะครับว่ารูปแบบการแสดงข้อมูลจากฐานข้อมูลของทั้งคู่ที่จะให้ผลลัพ์ออกมาเหมือนกันคือออกมาหมดทั้งตารางฐานข้อมูลเลยนั้นเขียนแบบเดิม ก็คือ Select * แล้วระบุลงไปว่าจะดึงมาจากไหน  ส่วนในรูปแบบของ Active ระบุว่าจะ get มาจาก table อะไรแล้วให้ result ส่งค่ากลับมาให้เลย การทำงานใกล้เคียงกันนะครับ ของเดิมคือเราสั่ง Query แต่ที่เป็น Active เราสั่งให้ไป get ค่ามาเลย

ทีนี้ถ้าเราต้องการทำงานกับเงื่อนไขที่มีมากขึ้นกว่าเดิม เราจะทำอย่างไร เช่นหากผมต้องการใช้คำสั่ง Limit กับเงื่อนไขใหม่นี้มาดูวิธีการเขียนกันครับ

SQL : Old style
$query = "SELECT * FROM customer_tbl LIMIT 20,10";
$customer = $this->db->query($query)->result();
Active : Style
$query = $this->db->get('contact_tbl', 10, 20)->result();

การไปกำหนดค่า limit เพื่อเลือกช่วงของข้อมูลตามจำนวนที่เราต้องการนั้น อันที่จริงใน SQL ก็ดูไม่ได้ยากเย็นอะไรนัก แต่การทำงานแบบ Active นี่ทำให้ลดขั้นตอนลงไปได้เพราะไม่ต้องไประบุเลยก็ได้ว่าจะใช้คำสั่ง limit  แม้ว่าเราจะสามารถเชื่อมโยงแบบหลายบรรทัดได้ด้วยคำสั่ง limit ได้แต่เอาไว้ดูในตัวอย่างต่อๆไปครับ

ถัดมาผมจะลองนำเสนอรูปแบบของการเรียกข้อมูลออกมาแบบเฉพาะ เจาะจง คือเรียกเป็นบางรายการไม่ได้เรียกออกมาทั้งหมด ลองดูกันครับ

SQL : Old style
$query = "SELECT first_name, last_name, email FROM customer_tbl";
$customer = $this->db->query($query);
Active : Style
$this->db->select('first_name, last_name, email');
$query = $this->db->get('customer_tbl')->result();

Code ในส่วนของ Active เราสามารถแยกรูปแบบการใช้คำสั่งออกจากกันแล้วนะมาต่อการในลักษณะของ ห่วงโซ่ ได้ ซึ่งจะทำให้เราเข้าใจคำสั่งได้ง่ายขึ้น

ทีนี้หากเราต้องการใช้เงื่อนไขสำคัญๆที่ใช้งานกันจริงๆ และบ่อยมากๆอย่าง Where ละจะใช้อย่างไรเราก็สามารถที่จะใช้ได้ในรูปแบบนี้ครับ

SQL : Old Style
$query = "SELECT * FROM customer_tbl WHERE id > 10";
$customer = $this->db->query($customer);
Active: Style 1
$query = $this->db->get_where('customer_tbl',array('id >' => '1'))->result();

Active : Style 2
$this->db->select('*');
$this->db->from('customer_tbl');
$this->db->where('id >', 1);
$query = $this->db->get();

จะเห็นว่าการเขียน Code แบบ Active นั้นแบบแรกคือใช้ get_where() แล้วยัดเงื่อนไขลงไปใน array แทน ส่วนแบบที่สองก็ทำได้เหมือนกัน แต่เป็นการเขียนแยกบรรทัดกันไปเลยเพื่อให้เข้าใจเรื่องของ SQL แบบชัดเจน

หลังจากที่คุณได้ลองทำความเข้าใจกับการทำงานของ Active Record มาแล้วการทำงานต่อไป Code ของคุณก็จะดูเป็นระเบียบ เข้าใจง่าย เป็นแบบเดียวกันกับที่ pattern ออกแบบเอาไว้

 

Link: https://codeigniter.com/