aslingga
(Anggal)
February 11, 2010, 12:38pm
1
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.
nasrul
(Nasrul Hamid)
February 13, 2010, 1:53pm
2
relasinya gimana kang?
satu A dapat memili banyak B atau gimana nih?
nasrul
(Nasrul Hamid)
February 13, 2010, 1:53pm
3
relasinya gimana kang?
satu A dapat memiliki banyak B atau gimana nih?
aslingga
(Anggal)
February 14, 2010, 10:51am
4
ONE TO ONE kang … Gimana ya
nasrul
(Nasrul Hamid)
February 14, 2010, 12:45pm
5
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
gudlak
aslingga
(Anggal)
February 16, 2010, 4:05am
6
makasih banyak bos … kalo saya mau ambil filed NewCol bisa nggak ya ? soalnya saya butuh datanya NewCol tersebut …
nasrul
(Nasrul Hamid)
February 16, 2010, 1:35pm
7
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…
aslingga
(Anggal)
February 17, 2010, 2:59am
8
nasrul:
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 …
nasrul
(Nasrul Hamid)
February 18, 2010, 3:33pm
9
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);
...
?>
jshot
(Jefri 08)
July 22, 2010, 2:12am
10
nasrul:
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() jd bingung, tp query2 SELECT dsb memang gak apa2 sih di controller, cuma konsep controller mvc nya gpp ya mas
thanks sharingnya
aslingga
(Anggal)
July 22, 2010, 3:30am
11
jshot:
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() jd bingung, tp query2 SELECT dsb memang gak apa2 sih di controller, cuma konsep controller mvc nya gpp ya mas
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
jshot
(Jefri 08)
July 22, 2010, 5:04am
12
ooh jadi gitu alasannya
berarti isi dari model Yii agak berbeda dengan konsep di framework CI nya gak mas?
soalnya baru masuk ke Yii jadi agak pusing ngebedain
aqge
(Programmer Riau)
November 23, 2010, 2:41am
13
nasrul:
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…