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