我已经实现了mysql查询并且运行良好,但是在Yii2中转换/实现它时,我在活动记录方面遇到了一些困难。
SELECT
COUNT(price) AS total,
SUM(IF(is_veg = 'Y', 1, 0)) AS veg_count,
SUM(IF(is_not_veg = 'Y', 1, 0)) AS non_veg_count
FROM order_table
我尝试按照
进行操作orderTable::find()
->select('count(price) as total')
->sum(new Expression("IF(is_veg = 'Y', 1, 0)") => 'veg_count')
->sum(new Expression("IF(is_not_veg = 'Y', 1, 0)") => 'non_veg_count');
我遇到以下错误: 语法错误,意外的'=>'(T_DOUBLE_ARROW),预期为','或')'
答案 0 :(得分:1)
您可以尝试通过数组中的列使用简单的选择
(并注意正确的引号顺序)
orderTable::find()
->select(['count(price) as total',
"SUM(IF(is_veg = 'Y', 1, 0)) AS veg_count",
"SUM(IF(is_not_veg = 'Y', 1, 0)) AS non_veg_count"])
但是请确保您具有对应的公共var列别名,否则结果模型将不包含结果
您需要的OrderTable模型中
class OrderTable extends \yii\db\ActiveRecord
{
public $veg_count;
public $non_veg_count;
...