Siam2Advance Blog :

Web Programmer and Developer

Jan
25

CakePHP hasMany

Posted by Mr. Suriya

สวัสดีครับ วันนี้ผมจะแนะนำเรื่องของการใช้ Models ของ CakePHP ในการเชื่อมโยง (Relationship)
หรือการใช้ Foreign Key (FK) ในการดึงข้อมูลของอีก ตางรางหนึ่งที่มีการเชื่อมโยงกันนะครับ

การเชื่อมโยงตารางทั้งสองนั้นจะต้องมีการทำหนด foreign key ให้กับตารางที่เราต้องการจะเชื่อมด้วยนะครับ
อันบทความนี้ผมจะขอ ยกตัวอย่าง การทำ Webboard นะครับ

Webboard ที่ผมจะสร้างนี้จะมีตางรางอยู่ 2 ตางรางครับ คือ
1. ตาราง Topics ใช้สำหรับเก็บหัวข้อของกระทู้ครับ และเก็บ รหัสของกระทู้หรือ Primary key นั้นเอง
2. ตาราง Comments ใช้เก็บข้อความที่จะ Comment ในกระทู้นั้นๆนะครับ

โครงสร้างของ ตารางทั้งสอง
ตาราง Topics
- id (PK)
- headline
- detail

ตาราง Comments
- id (PK)
- topic_id (FK)
- detail

เมื่อเรามี 2 ตารางแล้วเวลาเขียน Models นั้นก็จะต้องมีด้วยกัน 2 Models เช่นกันนะครับ
1. Model Topic (Path : /app/models/topic.php)
2. Model Comment (Path : /app/models/comment.php)

มาเริ่มเขียน Class กันเลยก็แล้วกันครับ

Class Topic Model

1
2
3
4
5
6
//Path : /app/models/topic.php
class Topic extends AppModel
{
         var $name = 'Topic';
         var $hasMany = 'Comment';
}

Class Comment Model

1
2
3
4
//Path : /app/models/comment.php
class Comment extends AppModel
{
         var $name = 'comment';

เท่านี้เราก็จะสามารถเรียกแค่ Models Topic ตัวเดียวแต่เราจะได้ข้อมูลจากตาราง Comment มาด้วยครับ
เพียงแต่เราระบบการค้นหาใน Controller โดยให้หาจาก PK ของ ตาราง Topic ครับ

มาดูตัวอย่างใน Controller กันเลย
Class Topics Controller

1
2
3
4
5
6
7
8
9
10
11
12
class TopicsController extends AppController {
                  var $name = 'Topics';
 
                  function index() {
                       $this->flash('','');
                       $getId = $this->passedArgs['id'];
                       $result = $this->Topic->findById($getId);
 
                       //Out put
                       print_r($result);
                  }
}

ผลลัพธ์ที่ได้นั้นจะอยู่ในรูปแบบของ Array ลองสั่ง Print_r ดูแล้วจะเห็นผลครับจากนั้นเราก็ไปทำการเขียน Views
เพื่อรับค่าแล้ว Loop เอาค่าออกมาครับ

ก็ขอจบบทความเรื่องของการใช้ hasMany ใน Model ของ CakePHP ใว้เพียงเท่านี้ครับผม
ยังมีการเรียกใช้ hasMany ใน Controller ด้วยนะครับ เดี๋ยวผมจะเขียนอธิบายในบทความต่อไปให้ครับผม

  1. noon Said,

    ช่วยมาบอกต่อด้วยน๊า….ว่างๆๆ add มาคุยกันมั่งนะคะ…มีเรื่องอยากถามเยอะเรยยย

  2. noon Said,

    อธิบายการทำทั้ง mvc ของ webbord เลยนะคะ
    ขอบคุณค่ะ
    นุ่น
    phoenix_foru@hotmail.com

Add A Comment