\yii\db\Query() 中的 Yii2 数学

Yii2 math in \yii\db\Query()

我想做一些数学运算(除、减、加...),两个或更多字段的值正在使用 Yii 数据库查询,如下所示。我可以这样做吗?

 $data = (new \yii\db\Query())
 ->select([
  'date',
  'SUM( IF(status = "Passed", 1, 0) ) AS passed',
  'SUM( IF(status = "Failed", 1, 0) ) AS failed',
  'SUM( IF(status = "On Hold", 1, 0) ) AS onhold',
  'passed/onhold as selfsubmit',
  'COUNT(*) AS total'
 ])
 ->from('qa3d')
 ->groupBy('date')
 ->all();

首先,您不能在使用 MySQL 的同一查询中使用别名进行算术运算(数学)。那is mentioned here也是。

但是您可以使用 yii\db\Expression class 进行计算,因为这样,框架就不会尝试将表达式转义为 MySQL 列。

所以基本上你必须 select 没有别名和 Expression class.

的表达式

例如:

$data = (new \yii\db\Query())
    ->select([
        'date',
        'SUM( IF(status = "Passed", 1, 0) ) AS passed',
        'SUM( IF(status = "Failed", 1, 0) ) AS failed',
        'SUM( IF(status = "On Hold", 1, 0) ) AS onhold',
        new \yii\db\Expression('SUM( IF(status = "Passed", 1, 0) ) / SUM( IF(status = "On Hold", 1, 0) ) AS selfsubmit'),
        'COUNT(*) AS total'
    ])
    ->from('qa3d')
    ->groupBy('date')
    ->all();