2017-01-17 74 views
1

在第一列的gridview中我有一個快遞列表。我需要爲每位快遞員計算訂單數量。在SQL它看起來像sql查詢在gridview中的foreach yii2

SELECT order_customFields.order_customFields_delivery_method, 
    sum(case `order`.order_status when 'sent' then 1 else 0 end) paid 
FROM order_customFields 
    INNER JOIN `order` ON order_customFields.order_id = `order`.order_id 
WHERE 
    order_customFields.order_customFields_order_date >= '2016-12-01' AND 
    order_customFields.order_customFields_order_date <= '2016-12-31' 
AND order_customFields.order_customFields_delivery_method = eu_dpd; 

如果我創建快遞陣列並做到這一點的foreach中的SQL查詢,像

`$courier = [eu_dpd,eu_dhl,eu_ups] 
foreach ($courier as $value) { 
    SELECT order_customFields.order_customFields_delivery_method, 
    sum(case `order`.order_status when 'sent' then 1 else 0 end) paid 
FROM order_customFields 
    INNER JOIN `order` ON order_customFields.order_id = `order`.order_id 
WHERE 
    order_customFields.order_customFields_order_date >= '2016-12-01' AND 
    order_customFields.order_customFields_order_date <= '2016-12-31' 
AND order_customFields.order_customFields_delivery_method = $value; 
}` 

如何將其應用於yii2?

+0

如何使用'group by'而不是'AND order_customFields.order_customFields_delivery_method = $ value;'和'foreach' ? – Yupik

+0

@Yupik也許是可能的。你能告訴我它是如何得到在gridview?哪裏應該有要求? – cruim

回答

1

複雜查詢的簡單方法是基於正常的數據庫連接上

$yourModel = Yii::$app->db->createCommand(
    "SELECT order_customFields.order_customFields_delivery_method as deliver_method, 
     sum(case `order`.order_status when 'sent' then 1 else 0 end) paid 
    FROM order_customFields 
    INNER JOIN `order` ON order_customFields.order_id = `order`.order_id 
    WHERE order_customFields.order_customFields_order_date >= '2016-12-01' 
    AND order_customFields.order_customFields_order_date <= '2016-12-31' 
    AND order_customFields.order_customFields_delivery_method = '" .$value . "';")->queryOne(); 

那麼createCommand你可以參考結果作爲

echo $yourModel['deliver_method']; 
echo $yourModel['paid']; 

爲GridView控件,你可以使用的SqlDataProvider和通dataProvider到您的視圖http://www.yiiframework.com/doc-2.0/yii-data-sqldataprovider.html

+0

你的意思是把createCommandin foreach? – cruim

+0

如果你需要內部的foreach,你可以把createCommand放在foreach中。 ..取決於您的應用需求.. – scaisEdge

+0

您的代碼在控制器中投入actionIndex,對不對? – cruim