Memahami Bind dan Unbind

CakePHP mengenal metode Bind dan Unbind. Dengan metode ini, seorang programmer akan dengan sangat mudah menghubungkan sebuah model dengan model yang lain, dalam waktu singkat, dengan model asosiasi yang disediakan oleh CakePHP (ada empat model asosiasi : hasOne, hasMany, belongsTo, hasAndBelongsToMany). Model dasar dari kedua fungsi ini adalah sebagai berikut :

$this->Model->bindModel(
array(‘associationName’ => array(
‘associatedModelClassName’ => array(
// normal association keys go here…
)
)
)
);

Bind digunakan untuk membuat asosiasi baru, sebagaimana contoh di atas. Bind ini hanya akan berjalan untuk satu kali definisi saja, dan untuk menggunakannya kembali, programmer harus mendefinisikan ulang asosiasi yang akan dibuat antar dua model yang sebelumnya sama sekali tidak berhubungan.

Sedangkan unbind sebagai berikut :

$this->Leader->unbindModel(array(‘hasMany’ => array(‘Follower’)));

Unbind akan menghilangkan (untuk sementara) asosiasi yang sudah didefinisikan antar dua model. Sebagaimana bind, unbind hanya berlaku untuk satu kali pendefinisian saja.

Oke, kita masuk contoh kasus. Alkisah, ada tiga buah model dengan skema relasi antar tabel sebagai berikut :

1. Tabel Practicumnames, memiliki model Practicumname. Tabel ini berisi nama-nama praktikum yang ada di sebuah laboratorium. Tabel ini memiliki hubungan 1 to N (one to many) dengan tabel Practicumschedules. Artinya, satu mata praktikum bisa jadi memiliki jadwal lebih dari satu.

2. Tabel Practicumschedules, memiliki model Practicumschedule. Tabel ini berisi jadwal-jadwal praktikum untuk nama praktikum yang bersesuaian.  Tabel ini mempunyai relasi N to 1 (many to one) dengan tabel Practicumnames serta relasi N to N (many to many) dengan tabel Practicians.

3. Tabel Practicians, memiliki model Practician. Tabel ini berisi nama-nama praktikan yang terdaftar dan memiliki relasi N to N (many to many) dengan tabel Practicumschedules.

skema-bind-unbind

Pertanyaannya : Bagaimana caranya, jika kita ingin mengambil beberapa record yang ada hubungannya, antara practician dengan practicumnames ? Misalkan, kita ingin tahu praktikum apa saja yang diikuti oleh seorang praktikan yang terdaftar.

Jawaban : gunakan Bind. Lihat contoh di bawah ini,

$this->Practician->bindModel(
array(‘hasAndBelongsToMany’ => array(
‘Practicumname’ => array(
‘className’ => ‘Practicumname’,
)
)
)
);

Clear ! Oke, kita bisa langsung membuat sebuah asosiasi antar model Practician dengan Practicumname dan langsung saja kita mengeksekusi fungsi-fungsi

Be Sociable, Share!
Categories: CakePHP

1 Comment

  • in03ng says:

    Mas, ini gak perlu pake ‘lewat’ Practicumschedules dulu ya?
    Kalo di rails ada mekanisme ‘:through’ buat solving problem serupa, makanya saya masih agak bingung nih. Bisa diperjelas lagi mas?

Leave a Reply