Yii 2.0 查询生成器 - Select 文本作为列(没有 grave/back tick/back 引号)

Yii 2.0 query builder - Select text as column (without grave/back tick/back quote)

提出一个问题,我花了过去 2 个小时在互联网上搜索并找不到解决方案,但最终找到了解决方案,所以我会 post 此处为未来用户提供答案。

如果我正在使用 Yii 的查询生成器,但想将列设置为预定义文本的字符串而不是列本身。当您在 select 语句中使用单引号时会发生这种情况,因此这对我的日期格式和 'All Sites' 列来说都是一个问题。

$query = Department::find()
  ->alias('d')
  ->select("user_name, count(department) as departments, DATE_FORMAT(join_date, '%Y-%m') as join_date 'All Sites'")
  ->createCommand()
  ->getRawSql();

这个returns:

Select user_name, count(department) as departments, DATE_FORMAT(join_date, `'%Y-%m')` AS `join_date` `'All Sites'` 
from `department_table` `d`

那么我该如何转义 'All Sites' 字符串和正则表达式,这样 Yii 就不会固有地添加反引号

解决方法如下。我发现我的 date_format 的解决方案不适用于文本字符串,因此我已经给出了两种关于转义反引号问题的变体,以防对您有帮助。

请注意,要使用 Expression,您必须包括:

use yii\db\Expression;
$query = Department::find()
            ->alias('d')
            ->select("user_name, count(department) as departments")
            ->addSelect(["DATE_FORMAT(join_date, '%Y-%m') as join_date"])
            ->addSelect(new Expression("'All sites'"))
            ->createCommand()
            ->getRawSql();

这会输出以下查询:

Select  username, count(department) as department, DATE_FORMAT(join_date, '%Y-%m') as join_date, 'All Sites'
    FROM `department_table` `d`