1、需求:按照diagnosis分类统计订单
drupal实体查询 使用entityQueryAggregate可以实现:
\Drupal::entityQueryAggregate('ixtend_order')
->condition('approval_status', 1)
->groupBy('diagnosis')
->aggregate('id', 'COUNT')
->execute();
2、按月统计最近8个月的订单数据,但是订单内的时间保存的是时间戳。如果使用sql语句就非常简单。但是项目上要求尽量不使用原生sql。
首先还是使用\Drupal::entityQueryAggregate实现,但是发现entityQueryAggregate 使用FROM_UNIXTIME表达式后的数据分组是无效的。
最后google 找到了另一种方案: addExpression
$connection = \Drupal::database();
$query = $connection->select('ixtend_order');
$query->addExpression('count(id)', 'uid_node_count');
$query->addExpression("FROM_UNIXTIME(created,'%Y-%m')", 'month');
$query->groupBy("month")->orderBy('month', 'DESC')->range(0, 8);
$res = $query->execute()->fetchAll();
遇到的坑:
我发现上面的换一种写法就行不通了,因为之前在TP,YII,LARAVEL 习惯了连贯操作写法,所以习惯就用了连贯操作,但是不清楚为什么drupal中无效。
$connection = \Drupal::database();
$query = $connection->select('ixtend_order')
->addExpression('count(id)', 'uid_node_count')
->addExpression("FROM_UNIXTIME(created,'%Y-%m')", 'month')
->groupBy("month")->orderBy('month', 'DESC')->range(0, 8);
$result = $query->execute()->fetchAll();
|