Yii2 математика в \ yii \ db \ Query () - PullRequest
0 голосов
/ 18 января 2019

Я хочу сделать некоторые математические вычисления (деление, минус, плюс ...), и значения двух или более полей используют запрос к базе данных 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();

1 Ответ

0 голосов
/ 18 января 2019

Прежде всего, вы не можете выполнять арифметику (математику) с псевдонимами в одном запросе с MySQL. Это также упоминается здесь .

Но вы можете вычислить, используя класс yii\db\Expression, потому что при этом каркас не будет пытаться экранировать выражение в виде столбцов MySQL.

Таким образом, в основном вы должны выбрать выражение без псевдонимов и с классом Expression.

Например:

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