Artikel dan Tutorial
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 …”
Leave a Reply
CakePHP Indonesia adalah sebuah blog tentang framework CakePHP berbahasa Indonesia yang membahas tentang artikel, tutorial, berita dan tips yang terkait dengan CakePHP.
|
menu utama
kategori
- Bakery (1)
- Berita (11)
- Contributors (1)
- Diary (8)
- Eksplorasi (6)
- General Thought (7)
- Konsultasi (2)
- Tips dan Trik (8)
- Tutorial (9)
- Uncategorized (1)
- video (2)
CakePHP Indonesia adalah sebuah blog tentang
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…
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,
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
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…
Maaf, yang saya tambahkan field ‘id’ di tabel user_post…