使用嵌套连接创建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没有返回一个长查询,而是返回了许多带有HAS_MANY关系的查询。有人说使用“一起”并将其设置为TRUE(我已经在上面的代码中写了它)使它返回一个长查询,但它仍然无法正常工作。有人可以帮帮我吗?
注意: 在第一个代码中,m_supplier,t_pembelian_detail和m_bahan_baku是表,而不是模型