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`
提出一个问题,我花了过去 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`