yii CdbCriteria嵌套连接

时间:2013-09-25 17:15:44

标签: join yii nested criteria

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

0 个答案:

没有答案