Kohana ORM

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: PostModel dan StatusModel.

// 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 hasmany comments. Kita ubah PostModel 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 pada hasmany, kita pake plural*

Untuk table comments, fieldnya adalah:

id | name   | post_id


1  | arie   | 1
2  | yudi   | 1
3  | hendra | 2

dan CommentModel:

// 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 mempunya comment atau gak