0
votes

I have three tables in mysql database like this picture below :Relation

Now, with gii, I create those model like this :

For table BuktiPenerimaan

class BuktiPenerimaan extends \yii\db\ActiveRecord{
/**
 * @return \yii\db\ActiveQuery
 */
public function getInvoiceReports()
{
    return $this->hasMany(InvoiceReport::className(), ['bukti_penerimaan_id' => 'id']);
}
}

And InvoiceReports:

class InvoiceReport extends \yii\db\ActiveRecord{

/**
 * @return \yii\db\ActiveQuery
 */
public function getInvoiceReportDetails()
{
    return $this->hasMany(InvoiceReportDetail::className(), ['invoice_id' => 'id']);
}

My question is, how to access all record in table invoice_report_detail if I created an object that came from BuktiPenerimaan.

I use like this :

$model = $this->findModel($id); // model Bukti Penerimaan.
$dataInvoice  = $model->invoiceReports; //exist
$dataInvoiceDetail = $model->invoiceReports->invoiceReportDetails // failed, always null.

Please advixe

1

1 Answers

0
votes

$dataInvoice = $model->invoiceReports; is Array of InvoiceReport object.

You need to loop over each InvoiceReport to get related InvoiceReportDetail.

$model = $this->findModel($id); // model Bukti Penerimaan.
$dataInvoice  = $model->invoiceReports; //exist , but array of objects
$dataInvoiceDetail = [];
foreach($dataInvoice as $dInvoice):
   $dataInvoiceDetail[] = array_merge($dataInvoiceDetail,$dInvoice->invoiceReportDetails );
endforeach;
// $dataInvoiceDetail contains all invoice_report_detail