2017-01-17 2 views
1

В gridview в первом столбце у меня есть список курьеров. Мне нужно получить количество заказов для каждого курьера. В SQL Server это выглядит какsql запрос в foreach для gridview 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; 

Что делать, если я создаю массив с курьерами и сделать это 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

@ Юпик, возможно, это возможно. Не могли бы вы рассказать мне, как это происходит в gridview? Где должен быть запрос? – cruim

ответ

1

для сложного запроса простой способ является CreateCommand на основе нормального соединения дб

$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(); 

, то вы можете обратиться к результату,

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

Ваш код введен в действиеIndex в контроллере, правильно? – cruim

Смежные вопросы