22 March 2010

Grails-Relationships

Relationship คือ ความสัมพันธ์ ในทาง Database ความสัมพันธ์มีอยู่ด้วยกัน 3 แบบ คือ 1:1 , 1:N , M:N

Creating a One-to-Many Relationship
การสร้างความสัมพันธ์แบบ 1:N
ตัวอย่างนี้ จะสร้างความสัมพันธ์ระหว่าง Race กับ Registration โดย การแข่ง 1 รายการ สามารถมีผู้ลงทะเบียนแข่งขัน ได้หลายคน
ในไฟล์ Race.groovy เปิดไฟล์ และใส่ code เพิ่มไปจากเดิม 1 บรรทัด ตามนี้...

class Race {
//...............
static hasMany = [registrations:Registration]
String toString(){ return "${name},${startDate.format('MM/dd/yyyy')}" }
}
registrations คือ ชื่อ property ที่แสดงหน้าเว็บ
Registration คือ ชื่อ class
toString ใช้แสดงรายละเอียดของ class ในตัวอย่างนี้เราจะให้แสดง ชื่อการแข่งและวันที่แข่ง
สร้างที่ class Race แล้วทีนี้ก็ไปสร้างที่ class Registration บ้างดังนี้...
ใส่เพิ่มไปอีก 1 บรรทัดเช่นกัน

class Registration{
//........
static belongsTo = [race:Race]
}
race คือ ชื่อ property ที่แสดงหน้าเว็บส่วนของ Registration
Race คือ ชือ class Race ทีมีความสัมพันธ์ด้วยนั่นเอง

Run applications แล้ว กรอกข้อมูลในส่วน Race และ Registration

ตรงช่อง registrations ยังว่างอยู่...อย่าเพิ่งสนใจ ต่อไปกรอกข้อมูลส่วน Registration....


ในส่วน Registration มี Race ขึ้นมาให้เลือกแล้ว เราก็เลือก"แข่งวิ่งควาย"
จากนั้นไปกดดู race จะเห็นว่า มี Registration มา 1 คนแล้ว

---------------------------------------------------------------
Creating a Many-to-Many Relationship
การสร้างความสัมพันธ์แบบ M:N
ตัวอย่าง:
เพิ่ม class Runner พิมพ์ grails create-domain-class Runner เพิ่ม code ตามนี้เลย...
class Runner {

static constraints = {
firstName(blank:false)
lastName(blank:false)
dateOfBirth()
gender(inList:["M","F"])
address()
city()
stage()
zipcode()
email(email:true)
}
static hasMany=[registrations:Registration]
String firstName
String lastName
Date dateOfBirth
String gender
String address
String city
String Stage
String zipcode
String email

String toString(){"${lastName},$firstName (${email})"}
}
แก้ไขไฟล์ Registration ตามนี้...
class Registration {
static constraints = {
race()
runner()
paid()
dateCreate()
}
static belongsTo = [race:Race,runner:Runner]
boolean paid
Date dateCreate
}

สร้างไฟล์ controller ของ Runner พิมพ์ grails create-controller Runner
แก้ไขดังนี้...
class RunnerController {

def scaffold = true
}


เพิ่มข้อมูล....



ตอนนี้ก็คงพอจะเข้าใจกันแล้วนะครับ...
grails and groovy ทำให้ชีวิตง่ายขึ้นจริงๆ ^_^

2 comments: