2016-08-23 64 views
1

正在使用数据提供程序,我想查询转换成SQL以便它跟随代表数据更改SQL查询来yii2格式

这是原始的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 

这些的dataProvider方式关系我在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数据提供程序

我想上面的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 '); 

我怎样才能做到这一点

这是数据库架构

enter image description here

+0

()? –

回答

1

当你有复杂的SQL相关的你在哪里使用$ dataProvider->的getAttributes模型是回报例如,你可以使用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(); 
+0

对于复杂的查询,你也可以使用Yii :: $ app-> db-> createCommand($ sql) - > queryAll();它不会返回模型(它会返回一个数组),但从资源的角度来看它更便宜 –