0

我无法使用嵌套连接创建 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 是,而不是模型

4

0 回答 0