Fitur Relasi Active Record dalam Yii Framework (Bagian 2)
October 8th, 2011, Written by: | Categories: Programming, Tutorial, Yii Framework

Pada artikel pertama tentang fitur Active Record, kita membahas tentang BELONGS_TO dan HAS_MANY, relasi yang paling umum digunakan. Berikut merupakan lanjutan dari artikel pertama, tentang relasi-relasi yang didukung oleh Active Record Yii.

Yii Framework

Yii Framework yang cepat, aman dan profesional

HAS_ONE

Jenis ketiga ini merupakan relasi yang digunakan pada relasi One to One. Untuk menunjukkan dalam kondisi seperti apa relasi HAS_ONE digunakan silahkan lihat skema sederhana di bawah ini:

Contoh Relasi One to One

Contoh Relasi One to One


Terdapat dua buah tabel. Tabel Profile yang menunjuk ke tabel User. Satu user hanya mungkin memiliki satu profil. Oleh karena itu relasi antar dua tabel tersebut adalah One to One.

Berikut merupakan contoh code jika diambil dari sudut pandang model User:

//model User
'profile' => array(self::HAS_ONE, 'Profile', 'user_id');

Jika diambil dari sudut pandang Profile maka kita menggunakan relasi BELONGS_TO seperti biasanya:

//model Profile
'user'=>array(self::BELONGS_TO, 'User', 'user_id');

Cara penggunaan relasi HAS_ONE sama dengan BELONGS_TO. Jadi misalnya kita sudah menulis relasi HAS_ONE seperti di atas, maka contoh pemanggilannya seperti berikut ini:

$user = User::model()->findByPk(3);
echo $user->profile->full_name;
echo $user->profile->address;

Bagi pemula terkadang mungkin akan cukup membingungkan perbedaan relasi HAS_ONE dengan BELONGS_TO. SJFriedl menulis artikel yang sempurna di website Yii Framework menjelaskan perbedaannya.

BELONGS_TO dipakai pada tabel Profile karena Profile memiliki foreign key (yakni user_id) yang menunjukkan ke tabel lain.

HAS_ONE dipakai pada tabel User karena ada tabel lain (yaitu Profile) yang menunjuk tabel User.

MANY_MANY

Tidak semua database(terutama database relasional) mendukung relasi many to many. Untuk mengerti apa itu relasi Many to Many silahkan perhatikan diagram di bawah ini:

Contoh Relasi Many to Many

Contoh Relasi Many to Many


Pada contoh di atas seorang pelanggan (Customer) boleh meminjam buku lebih dari satu. Dan sebuah buku juga mungkin dipinjam lebih dari satu orang. Inilah contoh Many to Many.

Karena database pada umumnya tidak bisa menangani relasi Many to Many, maka kita harus menambah tabel penengah. Dalam contoh ini tabel penengahnya adalah tabel yang mencatat siapa meminjam buku apa yang dinamai Loan. Relasi tabel Loan dengan tabel Customer adalah One to Many. Begitu juga relasi Loan dengan Book adalah One to Many. Dengan demikian masalah Many to Many terpecahkan.

Contoh Relasi Many to Many yang Sudah Dipecahkan

Contoh Relasi Many to Many yang Sudah Dipecahkan


Lalu mengapa kita masih membutuhkan MANY_MANY dari Yii, bukankah sudah tidak ada lagi relasi many to many?

Memang relasi many_many sudah hilang berkat adanya tabel penengah (yakni Loan), tetapi Yii membuat relasi MANY_MANY ini supaya kita tidak perlu membuat class model untuk tabel penengah tetapi tetap bisa mengakses data relasi mereka.

Berikut merupakan contoh deklarasinya:

//di model Customer
'books'=>array(self::MANY_MANY, 'Book', 'Loan(book_id, customer_id)'),

//di model Book
'customers'=>array(self::MANY_MANY, 'Customer', 'Loan(book_id, customer_id)'),

Contoh penggunaannya:

//ingin melihat daftar buku yang dipinjam customer 5
$customer = Customer::model()->findByPk(5);
$bookList = $customer->books;
foreach($bookList as $book)
{
	echo $book->title;
}

//ingin melihat buku berjudul "Hamlet" dipinjam siapa saja
$book = Book::model()->findByAttributes(array('title'=>'Hamlet'));
$customerList = $book->customers;
foreach($customerList as $customer)
{
	echo $customer->name;
}

Demikianlah dua relasi dari Yii Framework. Tersisa fungsi relasi terakhir dari Yii yaitu STAT. Penjelasan STAT akan dilanjutkan pada artikel berikutnya yang juga merupakan artikel terakhir dari rangkaian artikel mengenai fitur relasional yang disediakan oleh Yii Framework.

Apabila terdapat pertanyaan mengenai topik HAS_ONE dan MANY_MANY silahkan meninggalkan komentar di artikel sini.

More about: , ,

4 Responses to “Fitur Relasi Active Record dalam Yii Framework (Bagian 2)”

  1. Mengenali Relasi dalam Yii Framework (Bagian 1) - Computesta Blog

    [...] Pada artikel berikutnya penulis akan memaparkan fitur relasi Yii yang lain. Kalau ada sesuatu yang belum jelas mengenai artikel ini silahkan bertanya melalui komentar. Related PostsFitur Relasi Active Record dalam Yii Framework (Bagian 2)Mengakali Dynamic Binding Yii di PHP 5.2.xActive Record: Coding Tanpa QueryMenggunakan Yii Framework dengan OracleBerkenalan dengan Behavior di YiiCode Completion Yii Framework Pada NetbeansMengenal Access Control Filter dari YiiYii Tutorial : Menginstalasi Yii FrameworkKami Pakai Yii Framework – Bagian 2Kami Pakai Yii Framework – Bagian 1 Programming, Tutorial, Yii Framework | Comments (0) [...]

    Reply

Leave a Reply