Tambah SELECT column pada model

Saya ada query seperti ini :

[sql]SELECT *, ‘NewCol’ AS (SELECT b.id FROM B b WHERE b.fid = a.fid) FROM A a[/sql]

Saya ada dua model yaitu A dan B

Kira-kira gimana ya membuat rules pada modelnya, dan untuk CDbCriterianya gimana ya ???

Mohon bantuannya dong.

relasinya gimana kang?

satu A dapat memili banyak B atau gimana nih?

relasinya gimana kang?

satu A dapat memiliki banyak B atau gimana nih?

ONE TO ONE kang … Gimana ya ???

kalau berdasarkan kasus kamu,

models/A.php




<?php

class A extends CActiveRecord

{

...

    public function relations()

    {

        return array(

            'namaRelasiAkeB'=>array(self::HAS_ONE, 'B', 'fid'),

        );

    }

...

}



selengkapnya mengenai deklarasi relation: http://www.yiiframework.com/doc/guide/id/database.arr#mendeklarasikan-hubungan

lihat juga ini dan ini

dari controller kamu bisa panggil dengan




<?php

$criteria=new CDbCriteria;

$criteria->condition='fid=:fid';

$criteria->params=array(':fid'=>10); //menampilkan model dengan a.fid=10

$a=A::model()->find($criteria);

$aAll=A::model()->findAll(); //mengambil seluruh data 

//untuk render $a ke halaman a (view)

$this->render('a',array('a'=>$a));

?>



dari view kamu tinggal panggil




<?php echo "a.id=".$a->id.", b.id=".$a->namaRelasiAkeB->id.", a.fid".$a->fid.", b.fid".$b->fid; ?>



selengkapnya di: http://www.yiiframework.com/doc/guide/id/database.ar#membaca-rekaman

kalau mengenai rules -sejauh yang saya pahami- digunakan untuk menentukan batasan datanya, sehingga tidak perlu ada pendefinisian khusus. mohon diluruskan kiranya ada yang bengkok :rolleyes:

gudlak :lol:

makasih banyak bos … kalo saya mau ambil filed NewCol bisa nggak ya ? soalnya saya butuh datanya NewCol tersebut …

ummm,

b.id (field id dari tabel B) sama ga dengan NewCol yang kamu maksud?

atau coba tes query berikut:


SELECT a.*, b.id as NewCol from a inner join b on a.fid=b.fid

sama ga hasilnya dengan query yang pertama:


SELECT *, 'NewCol' AS (SELECT b.id FROM B b WHERE b.fid = a.fid) FROM A a

maaf sejauh ini saya hanya mengira-ngira dengan segala keterbatasan saya. :)

wallaahu ta’ala a’laam…

kalo untuk nilai dari NewCol itu bisa berupa b.id atau bisa yang lain misalnya (b.id + 2) cuma pada contoh ini saya memisalkannya b.id

kira-kira bisa nggak ya penambahan SELECT COLUMN pada model yang udah ada …

udah nyoba behaviour findAllBySQL($sql,$params) ?




<?php

...

$sql = "SELECT *, 

       'NewCol' AS (SELECT b.id FROM B b WHERE b.fid = a.fid) FROM A a 

        WHERE colKondisi=:kolKondisi";

$kondisi = "sesuatu";

$params = array(':kolKondisi'=$kondisi);

$a=A::model()->findAllBySql($sql,$params);

...

?>



mas nasrul, syntax ini nulisnya dimana ya? model atau controller, ane masih bingung, kalo di controller kan harusnya perintah2 query sebaiknya di model,

tapi kalau di model, knp harus ada scope seperti A::model() :rolleyes: jd bingung, tp query2 SELECT dsb memang gak apa2 sih di controller, cuma konsep controller mvc nya gpp ya mas ;D

thanks sharingnya :)

Hmmm … kenapa sintaks SQL nggak layak di Controller bro ??? Dan lebih rancu saya rasa kalo di model. Model di Yii kan menerapkan ORM(Object Relational Mapping) dan controller itu bertugas untuk memproses Business Logic.

CMIIW :D

ooh jadi gitu alasannya :rolleyes:

berarti isi dari model Yii agak berbeda dengan konsep di framework CI nya gak mas?

soalnya baru masuk ke Yii jadi agak pusing ngebedain

bener kata oom nasrul, sepertinya query agan agak nyeleneh…

kalo memang bener relasinya One to one kan gak perlu sub query kaya yang kedua

Tabla berelasi dengan table B untuk seluruh datanya disa diakse dengan mudah dari AR

table A

fid

A_1

A_2

A_3

A_4

table B

fid

B_5

B_6

B_7

B_8

seharusnya dengan




Select A.*, B.*  from A inner join B on A.fid = B.fid



ini sudah cukup untuik menampilkan field yang mana aja, B_5 s/d B_8

berarti Di AR nya A

class A





public function relation()

{

  return array(

        'newCol'=>array(self::BELONGS_TO, 'B','fid') 

);

}



dicontroller nya


public function getKolomFromBandA()

{

   $model=A::model()->with('newCol')->findAll();

   return $model;

   

}



di viewnya kan tinggal manggil saja


<?php

 echo $model->A_1;

 echo $model->A_2;

 echo $model->newCol->B_5;

 echo $model->newCol->B_6; 


?>

tapi kalo memang itu sub query tidak perlu menggunakan AR, pakai saja DB command kan,… pokoknya pilihan pertama hindari subquery, kecuali terpaksa, hindari menulis sql kecuali terpaksa…

lepas itu semua mudah untuk di maintain

ok gan semoga membantu deh…