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 は 1 つの長いクエリを返さず、代わりに HAS_MANY 関係を持つ多くのクエリを返すようです。誰かが「一緒に」を使用してTRUEに設定し(上記のコードですでに書いています)、1つの長いクエリを返すようにすると言いましたが、まだ機能していません。誰でも私を助けてもらえますか?

注: 最初のコードでは、m_supplier、t_pembelian_detail、および m_bahan_baku はテーブルであり、モデルではありません

4

0 に答える 0