public function relations()
{
return array(
'agregate'=>array(self::STAT,'B','A_id',
'select'=>'sum(B.price) as Total, count(B.B_id) as jumlah,
max(B.price) as maks, min(B.price) as Min' )
)
}
dari awal saya memang tidak mencoba trik begini karena khawatir akan ada dua join sehingga selain merusak hasinya juga menyita resouresnya DB,
tapi hasilnya sih bener keluar tapi soal resourcesnya ane kurang paham nih… sebelum ada yang meng-konfirmasi trik diatas tidak boros resources, ane masih deg-degan makainya…
sepertinya emang harus carving sql sendiri ya bos, sementara ini keputusan apa pake relational AR atau carving sql bisa dengan mempertimbangkan kemungkinan banyaknya data…
menurut sy, tergantung arsitektur dbnya. biasanya untuk mysql butuh enclosed (`) untuk menandai object dalam database. sehingga sql harusnya menjadi:
$sql="
SELECT
`A`.`id`,
sum(`B`.`price`) as `Total`,
count(`B`.`B_id`) as `jumlah`,
max(`B`.price) as `maks`,
min(`B`.`price`) as `Minimum`
FROM
`A` INNER JOIN `B` ON `A`.`ID`=`B`.`A_ID`
";
beda halnya denga sqlite, enclosed tidak diperlukan atau bahkan kadang dibutuhkan dengan quote (")
untuk kasus ini solve dari zaccaria mungkin yang terbaik:
sehingga jika disesuaikan dengan kasus kita harusnya menjadi
$criteria= new CDbCriteria;
$criteria->select= '`A`.`id`,sum(`B`.`price`) as Total,count(`B`.`B_id`) as jumlah, max(`B`.`price`) as maks,min(`B`.`price`) as minimum';
$criteria->join= 'INNER JOIN `B` USING(`A_ID`)';
//$criteria->condition='`customer_company`=1'; //pada kasus kita tidak ada kondisi
A::model()->findAll($criteria);
atau jika Kamu telah mendefinisikan relations A ke B pada model A
public function relations()
{
return array(
'relKeB'=>array(selff::HAS_MANY, 'B', 'A_ID'),
);
}
kita dapat menggunakan attribut with pada CDbCriteria
[size="2"]
$criteria= new CDbCriteria;
$criteria->select= '`id`,sum(`price`) as Total,count(`B_id`) as jumlah, max(`price`) as maks,min(`price`) as minimum';
$criteria->with='relKeB';
A::model()->findAll($criteria);
[/size][/font][/color][/size][/font][font="arial, verdana, tahoma, sans-serif"][size="2"][color="#1C2837"][font="monospace"][size="2"]kalau mau pakai $cari->total, sepertinya harus definisikan
public $_total;
dari class model A.[/size][/font][/color][/size][/font][font="arial, verdana, tahoma, sans-serif"][size="2"][color="#1C2837"][font="monospace"] [/font][/color][/size][/font]
Sukses gan, Makasih banget ya agan nasrul, tp mungkin bisa dijelaskan napa mesti di definisikan
public $_total;
terlebih dahulu ?
kalo ada link referensinya, ntar ane baca sendiri, soalnya yg pernah ane baca gak ada keterangan spt itu ato mungkin ada yg terlewatkan yah
sebelumnya ane udah coba pake setAttribut, dll tp gagal mulu.
o iya punya ane gak ada underscore( _ ) nya. soalnya tetap errornya kek yg sebelumnya kalo di kasih underscore ( _ ) karena “as” nya “total” gitu aja gak pake _
secara pada model A memang tidak ada atribut ‘total’, sehingga $A->total tidaklah dikenal. untuk itu kita perlu mendefinisikan atributnya secara public agar dapat diakses dari mana saja.
semoga cukup memberikan gambaran, dan mohon maaf atas keterbatasan ana.