Изменение запроса sql в формате yii2

Я использую dataProvider, и я хотел бы преобразовать запрос в sql, чтобы он соответствовал способу представления данных DataProvider

Это необработанный sql

SELECT tblpritems.PRlineID , tblpritems.Tracking_Code , tblpritems.Description , tblpritems.Quantity , tblpritems.Unit_Price , tblpritems.Extended_price , tblpritems.PRID , tblpritems.pr_solicitation_id , tblpritems.date_item_received , tblpritems.Quantity_received , tblpritems.Remarks_on_receipt , tblpritems.Received_by FROM prts.tblpritems INNER JOIN prts.tblpr ON (tblpritems.PRID = tblpr.PRID) INNER JOIN prts.tblprsolicitations ON (tblprsolicitations.PRID = tblpr.PRID) AND (tblpritems.pr_solicitation_id = tblprsolicitations.pr_solicitation_id) INNER JOIN prts.tblprsuppliers ON (tblprsuppliers.pr_solicitation_id = tblprsolicitations.pr_solicitation_id) INNER JOIN prts.tblpo ON (tblpo.pr_supplier_id = tblprsuppliers.pr_supplier_id) where tblpr.PRID=".$val." and tblpo.PO_Status_ID=7 and item_received_status=0 

Это отношения, которые у меня есть в tblpritems

  public function getPR() { return $this->hasOne(Tblpr::className(), ['PRID' => 'PRID']); } /** * @return \yii\db\ActiveQuery */ public function getPrSolicitation() { return $this->hasOne(Tblprsolicitations::className(), ['pr_solicitation_id' => 'pr_solicitation_id']); } 

В настоящее время я использую

 $dataProvider = new SqlDataProvider([ 'sql' => $sql, 'pagination' => [ 'pageSize' => 10, ], ]); 

Но проблемы в том, что я не могу получить доступ к $ dataProvider-> getAttributes () в sql dataProvider

Я хотел бы, чтобы код sql выше был в этом формате

 $query = Tblprsuppliers::find() ->Joinwith('prSolicitation', 'prSolicitation.pr_solicitation_id = tblprsuppliers.pr_solicitation_id') ->Joinwith('supplier', 'supplier.supplier_id = tblprsuppliers.supplier_id') ->JoinWith('currency', 'currency.CurrencyID = tblprsuppliers.currency_id '); 

Как я могу достичь этого?

Это схема базы данных

введите описание изображения здесь

когда у вас есть сложный sql, связанный с экземпляром возврата, который вы можете использовать findBySql таким образом

  $sql = 'SELECT tblpritems.PRlineID , tblpritems.Tracking_Code , tblpritems.Description , tblpritems.Quantity , tblpritems.Unit_Price , tblpritems.Extended_price , tblpritems.PRID , tblpritems.pr_solicitation_id , tblpritems.date_item_received , tblpritems.Quantity_received , tblpritems.Remarks_on_receipt , tblpritems.Received_by FROM prts.tblpritems INNER JOIN prts.tblpr ON (tblpritems.PRID = tblpr.PRID) INNER JOIN prts.tblprsolicitations ON (tblprsolicitations.PRID = tblpr.PRID) AND (tblpritems.pr_solicitation_id = tblprsolicitations.pr_solicitation_id) INNER JOIN prts.tblprsuppliers ON (tblprsuppliers.pr_solicitation_id = tblprsolicitations.pr_solicitation_id) INNER JOIN prts.tblpo ON (tblpo.pr_supplier_id = tblprsuppliers.pr_supplier_id) where tblpr.PRID=".$val." and tblpo.PO_Status_ID=7 and item_received_status=0'; $model = Pritems::findBySql($sql)->all();