2 minutes
Kohana ORM #2
Pada postingan sebelumnya, kita udah mulai pake ORM, selanjutnya, kita
sekarang coba belajar membuat relasi has_one, has_many, dan
belongs_to.
relasi has_one
Misalkan kita punya post yang mempunyai status, lalu kita buat table posts dan table statuses (plural dari post dan status).
table statuses:
| id | name |
|---|---|
| 1 | publish |
| 2 | draft |
| 3 | private |
dan pada table posts:
| id | title | status_id |
|---|---|---|
| 1 | title #1 | 3 |
| 2 | title #2 | 1 |
| 3 | title #2 | 2 |
Kemudian kita buat 2 buah model yaitu: Post_Model dan Status_Model.
// models/status.php
class Status_Model extends ORM {}
dan:
// models/post.php
class Post_Model extends ORM
{
protected $has_one = array('status');
}
Untuk tau status dari sebah entry, kita tinggal pake ara sebagai berikut:
$posts = ORM::factory('post', 1)
->status->name;
Atau untuk memanggil semua entry pada table posts yang berstatuskan publish dengan cara:
$posts = ORM::factory('post')
->where('status_id', 1)
->find_all();
relasi has_many + belongs_to
Untuk relasi ini, contoh yang cocok adalah, setiap post mempunyai banyak
komentar. Maka table post ini mempunyai property has_many comments. Kita
ubah Post_Model menjadi:
// models/post.php
class Post_Model extends ORM
{
protected $has_one = array('status');
protected $has_many = array('comments');
}
note: pada
has_one, isinya adalah singular model (disini adalah status, dan padahas_many, kita pake plural
Untuk table comments, fieldnya adalah:
| id | name | post_id |
|---|---|---|
| 1 | arie | 1 |
| 2 | yudi | 1 |
| 3 | hendra | 2 |
dan Comment_Model:
// models/comment.php
class CommentModel extends ORM
{
protected $belongs_to = array('post');
}
untuk mendapatkan semua comment yang di post dengan id 1, kita bisa lakukan dengan:
$post = ORM::factory('post', 1);
$comments = $post->comments;
lalu kita gunakan foreach untuk $comments, sehingga:
foreach ($comments as $comment)
{
// proses
}
tentu aja kita mesti check dulu dengan method count(), apakah mempunyai
comment atau gak