Saya baru dapat dengan menggunakan method findByAttributes sbb:
/model/A.php:
...
public function relations()
{
return array(
'namaRelasiKeB'=>array(self::HAS_MANY, 'B', 'id_A'),
);
}
...
/controllers/AController.php:
...
private $_model;
...
//misal attribut1 C ingin dikeluarkan pada actionShow
public function actionShow()
{
$a = $this->loadA();
$this->render(
'show',
array(
'model'=>$a,
'bs'=>$a->namaRelasiKeB,
)
);
}
...
public function loadA($id=null)
{
if($this->_model===null)
{
if($id!==null || isset($_GET['id']))
$this->_model=A::model()->findbyPk($id!==null ? $id : $_GET['id']);
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $this->_model;
}
...
/views/A/show.php:
<?php IF (!empty($bs)): ?>
<?php foreach ($bs as $ <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' /> : ?>
Attribut1 = <?php echo C::model()->findByAttributes(array('id_C'=>$b->id_C))->attribut1;?></td>
<?php endforeach;?>
<?php else:?>
Tidak ada data yang berelasi.
<?php endif;?>
Jika rekan ada solusi yang lebih efisien, misalnya mendefinisikannya dalam relations dalam class A, mohon pertimbangannya. Terima kasih sebelumnya.
public function actionShow()
{
$a = $this->loadA();
$this->render(
'show',
array(
'model'=>$a,
)
);
}
...
public function loadA($id=null)
{
if($this->_model===null)
{
if($id!==null || isset($_GET['id']))
$this->_model=A::model()->with("namaRelasiKeC")->findbyPk($id!==null ? $id : $_GET['id']);
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $this->_model;
}
/views/A/show.php:
<?php IF (!empty($model->namaRelasiKeC)): ?>
<?php foreach ($model->namaRelasiKeC as $C) : ?>
Attribut1 = <?php echo $C->attribut1;?>
<?php endforeach;?>
<?php else:?>
Tidak ada data yang berelasi.
<?php endif;?>
Pada umumnya, langkah menampilkan data dengan CActiveRecord sbb:
[list=1]
[*]set Relations pada model.
/models/B.php
<?php
class B extends CActiveRecord
{
...
public function relations()
{
return array(
'relKeA'=>array(
self::BELONGS_TO,'A','fKeyA',
'joinType'=>'INNER JOIN',
),
'relKeC'=>array(
self::BELONGS_TO,'C','fKeyC',
'joinType'=>'INNER JOIN',
),
);
}
...
}
?>
[*]panggil ActiveRecord dari Controller
/controllers/BController.php
<?php
class BController extends CController
{
...
public function actionShow()
{
//panggil model B dari behavior loadB() yang sudah ada dalam controller
$modelB = $this->loadB();
//atau bisa juga dengan langsung memanggil modelnya.
//$modelB = B::model()->findAll($category);
//render view Show
$this->render('show',array('dataModelB'=>$modelB));
}
...
}
?>
[*]tampilkan dari view
/views/B/show.php
...
<?php IF (!empty($dataModelB)): ?>
<?php foreach ($dataModelB as $<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' /> : ?>
id_A Tabel A = <?php echo $b->relKeA->id_A;?>
Attribut1 Tabel C = <?php echo $b->relKeC->attribut1;?>
<?php endforeach;?>
<?php else:?>
Tidak ada data yang berelasi.
<?php endif;?>
...
Klo layout ada di dalam folder protected/layouts. Itu nanti tinggal buat satu file layout (.php) dan menggunakan CSS untuk membuatnya jadi tiga kolom. Klo misalnya pake CRUD dari Gii itu udah ada contoh codingan bikin layout-nya.
Newbie mau ikutan nanya… di bagian belakang itu tertulis B(A_id, C_id) itu maksudnya gimana yah? Soalnya selama ini saya cuman pernah lihat satu field saja… Belum pernah lihat coding itu, jadi kurang memahami codingnya…
bagaimana klo ingin menempatkan viewnya modul ke halaman layoutnya(ex: main.php). jadi begini, saya coba buat 1 modul dg nama blokym. didalam blokym ini terdapat 3 action(add, edit, index) kemudian pada viewnya ada 3 buah file(add.php,
edit.php, index.php).
nah bagaimana menampilkanny(indexnya aja) pada layout/main.php. jadi index.php dapat diakses semua user sedangkan add dan edit hanya admin yg bisa mengaksesnya. potongan kodenya seperti ini: