foreach中gridview yii2的sql查询

foreach中gridview yii2的sql查询,yii2,Yii2,在第一列的gridview中,我有一个courier列表。我需要了解每个快递员的订单数量。在sql中,它看起来像 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_custom

在第一列的gridview中,我有一个courier列表。我需要了解每个快递员的订单数量。在sql中,它看起来像

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;
选择订单\自定义字段。订单\自定义字段\交货方式,
已支付金额(案例“订单”。订单状态为“已发送”,然后为1或0结束)
来自订单\自定义字段
order\u customFields.order\u id=`order`.order\u id上的内部联接'order'
哪里
订单\自定义字段。订单\自定义字段\订单\日期>='2016-12-01'和
订单\自定义字段。订单\自定义字段\订单\日期='2016-12-01'和

order\u customFields.order\u customFields\u order\u date对于复杂查询,一种简单的方法是基于正常数据库连接的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();

对于gridview,您可以使用sqlDataProvider并将数据提供程序传递给您的视图

使用
分组方式
而不是
和order_customFields.order_customFields_delivery_method=$value
和foreach
?@Yupik也许是可能的。你能告诉我它是怎么进入gridview的吗?哪里应该有请求?如果你需要在foreach内部,你可以把createCommand放在foreach中。。取决于您的应用程序需要..您的代码放在控制器的actionIndex中,对吗?
$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'];