ネストされた結合で CdbCriteria を作成するのに問題があります。モデルのコードは次のとおりです(インドネシア語で申し訳ありません。誰もがクエリを理解できることを願っています):
public function report() {
$criteria=new CDbCriteria;
$criteria->alias = "p";
$criteria->select = "p.tanggal_transaksi,
MONTH( p.tanggal_transaksi ) AS bulan,
p.kode,
p.kode_supplier,
s.nama,
d.kode_bahan_baku,
b.nama_barang,
d.jumlah_kg,
d.jumlah_cones,
d.harga_satuan,
d.harga_satuan * d.jumlah_cones AS total,
FLOOR(d.harga_satuan * d.jumlah_cones * p.ppn / 100) AS ppn,
(d.harga_satuan * d.jumlah_cones) + FLOOR(d.harga_satuan * d.jumlah_cones * p.ppn / 100) AS total_akhir
";
$criteria->join = "JOIN m_supplier s ON s.kode = p.kode_supplier
RIGHT JOIN t_pembelian_detail d ON d.kode_pembelian = p.kode
JOIN m_bahan_baku b ON b.kode = d.kode_bahan_baku
";
$criteria->together = TRUE;
return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
));
}
モデルの名前はTPembelianで、関係は次のとおりです。
public function relations()
{
return array(
'supplier' => array(self::BELONGS_TO, 'MSupplier', 'kode_supplier'),
'tPembelianDetails' => array(self::HAS_MANY, 'TPembelianDetail', 'kode_pembelian'),
);
}
コントローラーでは、CActiveDataProvider の各属性を単純に出力するために、次のコード行を書きました。
$model = new TPembelian('search');
$dataProvider = $model->report();
foreach ($dataProvider->getData() as $data) {
echo "<pre>".print_r($data->attributes, 1)."</pre>";
}
問題は、TPembelian モデル (エイリアス "p" を使用) からの属性のみを出力することです。他の属性 (「p」以外のエイリアス) が出力されないのはなぜですか?
しばらく検索したところ、CActiveDataProvider は 1 つの長いクエリを返さず、代わりに HAS_MANY 関係を持つ多くのクエリを返すようです。誰かが「一緒に」を使用してTRUEに設定し(上記のコードですでに書いています)、1つの長いクエリを返すようにすると言いましたが、まだ機能していません。誰でも私を助けてもらえますか?
注: 最初のコードでは、m_supplier、t_pembelian_detail、および m_bahan_baku はテーブルであり、モデルではありません