Я использую 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();