CakePHP Indonesia : Berita, Artikel, Forum, Tutorial Framework CakePHP Berbahasa Indonesia untuk Pemula dan Tingkat Lanjut


Artikel dan Tutorial

[tanya-jawab] HABTM ? Whaz that …

Ada seorang teman yang bertanya (menjawab mas imamiscool di Posting saya yang lalu)

mau tanya:

database ku: :dst

users: user_id, user_name
posts: post_id, post_content
user_post: user_id, post_id

MODEL
UserModel
PostModel

CONTROLLER
User
Post

VIEW
User
Post


gimana cara nampilin content2 (post_content) pada halaman User, sedangkan pada Model User table yang digunakan adalah `users`,
I mean: gimana nerapin INNER JOIN di cakePHP-MVC schema?
fungsi itu ditaro dimana? Post, User, ato (ngga mungkin) UserPost [?]

Humm … oke deh mas imam. Saya coba bantu ya. Kalau melihat pertanyaan beliau, relasi antara tabel user dan post ini adalah relasi many to many (n to n), yang artinya, mau tidak mau antara tabel user dan tabel post harus dibuat sebuah metode normalisasi (yap, dan sepertinya mas imam sudah melakukannya dengan membuat tabel user_post).

CakePHP mengenal istilah asosiasi HABTM (has and belong to many), sebuah asosiasi antar model yang disamakan dengan relasi n to n pada database relasional. Untuk membuat relasi ini berjalan dengan baik, relasi HABTM haruslah didefinisikan pada dua model yang bertautan (misalkan : model User dan model Post, sedangkan tabel untuk menggabungkannya adalah posts_users). Maka, kita definisikan saja pada model User :

var $hasAndBelongsToMany =
array(’Post’ =>
array(’className’ => ‘Post’,
‘joinTable’ => ‘posts_users’,
‘foreignKey’ => ‘user_id’,
‘associationForeignKey’=> ‘post_id’,
‘conditions’ => ”,
‘order’ => ”,
‘limit’ => ”,
‘uniq’ => true,
‘finderQuery’ => ”,
‘deleteQuery’ => ”
)
);

dan pada model Post :

var $hasAndBelongsToMany = array(’User’ =>
array(’className’ => ‘User’,
‘joinTable’ => ‘posts_users’,
‘foreignKey’ => ‘post_id’,
‘associationForeignKey’=> ‘user_id’,
‘conditions’ => ”,
‘order’ => ”,
‘limit’ => ”,
‘uniq’ => true,
‘finderQuery’ => ”,
‘deleteQuery’ => ”
)
);

So, kedua model sudah terjalin (dan kalau memang ini yang dimaksud dengan “inner join” – nya, maka CakePHP sudah melakukannya secara otomatis). Untuk menggunakannya, tinggal dikasi perintah aja di controller aja (misal di controller Users) :

$postingan = $this->User->Post->findAll();

yang hasilnya berbentuk array. Untuk melibatkan berbagai macam klausa / condition SQL, silahkan lihat di API nya CakePHP, tentang parameter-parameter (berupa condition, order, limitation, dll) pada fungsi findAll, findById, dan sebagainya.
Dan untuk mengecek hasil yang berupa array tadi, gunakan saja fungsi print_r

print_r($postingan);

Untuk lebih jelasnya, mas imam bisa melihat artikel ini :

1. HABTM association in bakery


2. HABTM tutorial in flipflops.org

Happy coding …. :)

Comments

5 Responses to “[tanya-jawab] HABTM ? Whaz that …”

  1. blacque on August 9th, 2007 10:55 am

    Halo Sunu, dan salam kenal.. mau nanya nih… :)
    Kalo bikin comment form kaya’ WP gini di cake gimana ya?
    Maksudnya, untuk textarea-nya gimana?

    Aku coba tutorial di cake yang mengenai membuat blog. Hasilnya malah teksnya terus ke samping, bukan ke bawah, sesuai dengan yang kita ketik.

    thx b4…

    Halo juga, mas …
    untuk bikin teks area di CakePHP, bisa ditulis script seperti ini :

    $html->textarea(’News/content’, array(’rows’=>’20′,’cols’=>’90′))

    News/content disini adalah Model News dengan field bernama content, sedangkan keterangan yang ada di dalam array adalah atribut dari textarea. Di sana ditentukan rows 20 dan coloumn 90. Untuk lebih jelasnya, bisa dibaca di API-nya mas, akan banyak informasi tentang atribut-atribut helper yang barangkali akan membuat kita terkejut.

    Oke, gitu dulu mas. Selamat mencoba

  2. irfan on September 4th, 2007 11:09 am

    Mas Sunu, …

    Kalo boleh saya tanya, bagaimana caranya membuat asosiasi suatu table yang me-refer ke dirinya sendiri. Misalnya saja, Kategori bisa mempunyai banyak ‘Parent’ Kategori dan juga bisa punya banyak Child ‘Kategori’. Gambarannya seperti ini :

    Tabel Categories
    ————-
    id
    name

    Tabel categories_categories
    ———————-
    category_id
    child_id

    saya sudah coba deklarasikan asosiasi HABTM di model ‘Category’ untuk kasus ini, tapi setelah saya print_r($category), bagian asosiasi Category dengan Category selalu saja kosong (padahal tabel categories_categories sudah saya isi).

    Kalo bisa request dong tutorialnya tentang studi kasus asosiasi semacam ini ( nama kasusnya apa ya, saya nggak tahu :) ).

    thanks,

  3. riki on September 4th, 2007 11:46 pm

    maaf….saya maw nanya…di artikel di atas dijelaskan kalo table USERS dan POST itu relasinya “n to n”…tapi kenapa saya merasa relasinya “1 to n” untuk USERS???

    maaf kalo ini pernah dibahas sebelumnya…hanya ingin dapat pencerahan saja…

    thanx

  4. annas on February 4th, 2008 11:43 pm

    Mas sunu dan yang lain yang mau mbantu, saya sudah implementasikan HABTM dan alhamdulillah jadi. yang saya tanyakan gimana cara menghapus data yang ada pada tabel user_post ( kaya contoh di atas ) , saya coba tambah field ‘id’ di tabel post tapi yang terbaca di view tetep filed ‘id’ nya tabel post.
    Thx b4 utk jawabannya… :)

  5. annas on February 4th, 2008 11:45 pm

    Maaf, yang saya tambahkan field ‘id’ di tabel user_post…

Leave a Reply







CakePHP Indonesia is powered by WordPress 2.0 | Using furCake v.2.0 theme developed by Sunu Wibirama