Yii Framework Forum: Tambah SELECT column pada model - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Tambah SELECT column pada model Rate Topic: -----

#1 User is offline   Angga Lingga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 08-February 10

Posted 11 February 2010 - 07:38 AM

Saya ada query seperti ini :

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


Saya ada dua model yaitu A dan B

Kira-kira gimana ya membuat rules pada modelnya, dan untuk CDbCriterianya gimana ya ???
Mohon bantuannya dong.
0

#2 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 13 February 2010 - 08:53 AM

relasinya gimana kang?
satu A dapat memili banyak B atau gimana nih?
0

#3 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 13 February 2010 - 08:53 AM

relasinya gimana kang?
satu A dapat memiliki banyak B atau gimana nih?
0

#4 User is offline   Angga Lingga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 08-February 10

Posted 14 February 2010 - 05:51 AM

View Postnasrul, on 13 February 2010 - 08:53 AM, said:

relasinya gimana kang?
satu A dapat memili banyak B atau gimana nih?


ONE TO ONE kang ... Gimana ya ???
0

#5 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 14 February 2010 - 07:45 AM

View PostAngga Lingga, on 14 February 2010 - 05:51 AM, said:

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.yiiframew...asikan-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.yiiframew...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:
0

#6 User is offline   Angga Lingga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 08-February 10

Posted 15 February 2010 - 11:05 PM

View Postnasrul, on 14 February 2010 - 07:45 AM, said:

selengkapnya di: http://www.yiiframew...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 ...
0

#7 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 16 February 2010 - 08:35 AM

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


Quote

kalau iya, berarti untuk mendapatkan 'NewCol' kamu tinggal panggil
$a->namaRelasiAkeB->id


maaf sejauh ini saya hanya mengira-ngira dengan segala keterbatasan saya. :)
wallaahu ta'ala a'laam..
0

#8 User is offline   Angga Lingga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 08-February 10

Posted 16 February 2010 - 09:59 PM

View Postnasrul, on 16 February 2010 - 08:35 AM, said:

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 ...
0

#9 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 18 February 2010 - 10:33 AM

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);
...
?>

0

#10 User is offline   jshot 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 38
  • Joined: 18-July 10
  • Location:jakarta

Posted 21 July 2010 - 09:12 PM

View Postnasrul, on 18 February 2010 - 10:33 AM, said:

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 :)
0

#11 User is offline   Angga Lingga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 08-February 10

Posted 21 July 2010 - 10:30 PM

View Postjshot, on 21 July 2010 - 09:12 PM, said:

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
0

#12 User is offline   jshot 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 38
  • Joined: 18-July 10
  • Location:jakarta

Posted 22 July 2010 - 12:04 AM

View PostAngga Lingga, on 21 July 2010 - 10:30 PM, said:

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
0

#13 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 22 November 2010 - 09:41 PM

View Postnasrul, on 16 February 2010 - 08:35 AM, said:

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..



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...
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users