[Ask] Multi Relasi

maav gan ane mo tanya nih ama master master sekalian,

begini ceritanya, ane punya 3 tabel sebagai berikut

stok|

id_stok

id_produk

jumlah

productbl|

id_product

id_merk

type

merk|

id_merk

nama_merk

masalahnya adalah ane belom begitu paham dengan penggunaan public relation yang belongs_to, has_many dll, dan ane bingung untuk menghubungkan tbl merk ke stok melalui product tbl, mohon pencerahannya gan

kalo ngomong domain model, kan ceritanya jadi begini:




[STOK]---->[PRODUK]----->[MERK]



jadi dibacanya STOK belongs_to PRODUK, dan PRODUK belongs_to MERK

artinya STOK nge-refer ke PRODUK (lewat STOK.id_produk),

lalu PRODUK ngerefer ke MERK (via PRODUK.id_merk)

menggunakan relasi belongs_to,

tipe produk bisa diakses dari stok secara langsung sebagai object

contoh




  $stokJeans = STOCK::model()->findById(1); //pura2nya stock id 1 punya-nya jeans levis

  echo $stockJeans->PRODUK->type; //celana jeans

  echo $stockJeans->PRODUK->MERK->nama_merk; //Levis



kalo dari sisi yg direfer ceritanya bisa 2:

  1. MERK mempunyai banyak PRODUK, artinya 1 MERK.id di tabel produknya bisa ada banyak record yg mengacu ke PRODUK.id_merk yg sama, contoh MERK Levis, PRODUKnya celana jeans, jacket dan t-shirt

maka dikatakan MERK has_many PRODUK

otomatis kalo direlasikan hasilnya adalah array, contoh




 $levis = MERK::model()->find('nama_merk = "Levis"');

 if (is_array($levis->PRODUKS)) {

  foreach ($levis->PRODUKS as $produk)

    echo $product->type;

 }



  1. PRODUK punya STOK dan hanya ada 1 STOK untuk 1 PRODUK, nyambung contoh sebelumnya, celana jeans stoknya 12, jacket tinggal 3, dan t-shirt masih 8.

maka relasi seperti ini dinamakan PRODUK has_one STOCK

kalo direlasikan hasilnya adalah objek, contoh




 $jacket = PRODUCT::model()->find('type = "jacket"');

 echo $jacket->STOCK->jumlah;



sedikit tips, untuk penamaan relasi sebaiknya yg ada maknanya, misalnya kalo belongs_to atau has_one diberikan nama object yg bentuk tunggal gpp, tapi has_many lebih berarti kalo nama relasinya bentuk jamak. contoh:

//untuk belongs_to / has_one

stok->product

produk->merk

//untuk has_many

merk->products

merk->product_list

merk->daftar_produk

dll