Relation Has_one Dengan Jelly ORM

Kita telah belajar membuat class untuk ModelPost di postingan sebelumnya, sekarang kita mau belajar membuat relasi hasone dengan Jelly.

Oh ya.. contoh2 berikut ini adalah migrasi dari ORM yang udah gw post sebelumnya.

has_one, post *has_one* status

kita tulis untuk Model_Status

// classes/model/status.php
class Model_Status extends Jelly_Model {
  public static function initialize(Jelly_Meta $meta) {
    $meta
      ->fields(array(
        'id' => new Field_Primary,
        'name' => new Field_String(array(
          'unique' => true,
        ))
      ));
  }
}

lalu untuk Model_Post, mirip sepertya yang sebelumnya, hanya saja ada yg berubah.

// classes/model/post
class Model_Post extends Jelly_Model
{
  public static function initialize(Jelly_Meta $meta)
  {
    $meta->fields(array(
      'id' => new Field_Primary,
      'title' => new Field_String,
      'status' => new Field_HasOne,
    ));
  }
}

Relasi has_one dibentuk saat kita initialisasi.

Kita lihat statement 'status' => new Field_HasOne. status adalah alias, bukan nama field, begitu juga dengan id dan title. Jelly melihat jenis fieldnya, karena Field_HasOne maka Jelly akan merujuk ke ModelStatus, dan secara default, akan dianggap menggunakan field: aliasid, berarti pada table posts harus ada status_id, dan id pada table statuses.

Sekarang post sudah mempunyai relasi has_one.

$post = Jelly::factory('post');
$post->title = 'new Title';
$post->status = Jelly::factory('status', 1);
$post->save();