MVC untuk relasi MANY_MANY


(Anggal) #1

Mohon bantuan dari rekan2 sekalian bagaimana untuk ActiveRecord yang menggunakan relasi MANY_MANY.

Misal saya memiliki tabel




List

id (PK) 

title 

addedDate  


Item

id (PK) 

title  


ListItem

listId (PK, FK) 

itemId (PK, FK)



Dan saya ingin menampilkan data sesuai dengan query seperti ini:

[sql]SELECT l., i. FROM Item AS i

JOIN ListItem AS li ON li.itemId = i.id

JOIN List AS l ON li.listId = l.id

WHERE i.title LIKE ‘%city%’[/sql]

Mohon bantuannya bagaimana mebuat relations() untuk tables diatas.

Apakah perlu tiga model atau cukup dua model saja?

Kalo bisa penjelasannya detail untuk MVC kasus diatas, soalnya saya masih newbie …


(Demonroom) #2

Kalo gini gimana???

model\Item.php




...


public function relations()

	{

		return array(

		'list_rel'=>array(self::MANY_MANY,'List','ListItem(itemId,listId)')

		);

	}

...




views\site\index.php




<?

$cri = new CDbCriteria();

$cri->condition="list_rel.title !=''";

$query=Item::model()->with('list_rel')->findall($cri);

echo "<table><tr><th>ITEM ID</th><th>ITEM TITLE</th><th>LIST TITLE</th><th>LIST ADDED DATE</th></tr>";

foreach($query AS $query):

foreach($query->list_rel AS $q2) $l_title=$q2->title;

foreach($query->list_rel AS $q2) $l_ad=$q2->addedDate;

echo "

	<tr><td>$query->id</td><td>$query->title</td><td>$l_title</td><td>$l_ad</td></tr>

     ";

		endforeach;

echo "</table>";

?>







(Anggal) #3

Makasih ya bos buat bantuannya …

Saya coba dulu ya … :D


(Arief Priyadi) #4

Selamat pagi,

Mohon bantuan. saya memiliki tabel berikut




TabelA

Contact City1 City2 City3

AAA     1     2     3

BBB     2     2     1


Tabel B

IDCity CityName

1      Surabaya

2      Semarang

3      Jakarta



Saya ingin menampilkan output berikut:




Contact City1    City2     City3

AAA     Surabaya Semarang  Jakarta

BBB     Semarang Semarang  Surabaya



Mohon bantuan solusi relasi MVC nya


(Anggal) #5

mungkin bisa make cara seperti ini:


/* pada Model A */

public function relations() {

return array(

'City1' => array('B', 'City1),

'City2' => array('B', 'City2),

'City3' => array('B', 'City3)

);

}


(Xicath) #6

Sori, apa ga salah, ko di tabel A ga ada PK nya?

apa ka ribet ntar ke depannya?

dan jg biasanya ga perlu sampe 3 field gitu dgn merujuk FK yang sama, cukup satu field saja, well that’s my opinion.




ID Contact ID_City

1    AAA      3

2    BBB      5

1    CCC      1

2    BBB      3



Biasanya yg kya2x gini, mas [color="#8B0000"]#nasrul[/color] ahlinya… ;D


(Arief Priyadi) #7

Ada error

"It must specify the relation type, the related active record class and the foreign key."

Bukannya format relasi seperti ini ??




'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)




(Anggal) #8

Oh ya :D sori ada ketinggalan tadi … Maaf


/* pada Model A */

public function relations() {

return array(

'City1' => array(self::BELONGS_TO, 'B', 'City1'),

'City2' => array(self::BELONGS_TO, 'B', 'City2'),

'City3' => array(self::BELONGS_TO, 'B', 'City3')

);

}


(Arief Priyadi) #9

wah mumpung ada boz fastcrash yg replay…

iya memang untuk Contact ada ContactID… maaf kelewatan :D .

Tapi untuk struktur tabel saya dituntut untuk seperti model seperti itu…

jadi beberapa field merujuk ke FK yg sama.

Pengennya sih saya pakai model milik mas fastcrash…

ada solusi?


(Xicath) #10

Ok, brarti klo satu contact nanti ada yg punya 6 city atau lebih, bisa repot.

karna city ini sifatnya dynamic. kecuali kalo fixed, memang 3 saja untuk msng2x setiap kontak.

klo memang fixed kya-nya cara mas lingga sudah bener. itu klo mo pake AR.

tp klo mo langsung mungkin bisa pake fungsi IN(cit1, city2, city3) di mysql query.

:)


(Arief Priyadi) #11

OK. Mantab… sudah solve.

Kebetulan cuman ada 3 field statis bukan dinamis…

Terima kasih atas bantuan Mas #Lingga dan Mas #fastcrash


(Anggal) #12

Sama2 bro :D