欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

YII 中使用 Expression解决查询中带有常量报错的问题

程序员文章站 2022-03-20 15:45:56
Yii 官方手册关于 Expression 的解释:https://www.yiichina.com/doc/api/2.0/yii-db-expression Expression 表示不需要转义或引用的 DB 表达式。当表达式对象嵌入到 SQL 语句或片段时, 它将替换为 $expression ......

 

yii 官方手册关于 expression 的解释:

expression 表示不需要转义或引用的 db 表达式。
当表达式对象嵌入到 sql 语句或片段时, 它将替换为 $expression 属性值,而不进行任何的 db 转义或引用。 例如,
$expression = new expression('now()');
$now = (new \yii\db\query)->select($expression)->scalar(); // select now();
echo $now; // prints the current date

表达式对象主要用于将原始 sql 表达式传递给yii\db\query, yii\db\activequery 和相关类的方法。

 

问题:

当我们需要使用一个常量作为查询字段的时候,使用下面的写法,运行会报错:

user::find()->select(['id', '0 as is_constant'])->asarray()->all()

database exception – yii\db\exception
sqlstate[42s22]: column not found: 1054 unknown column '0' in 'field list'
the sql being executed was: select `id`, `0` as `is_constant` from `user`
error info: array
(
[0] => 42s22
[1] => 1054
[2] => unknown column '0' in 'field list'
)

caused by: pdoexception
sqlstate[42s22]: column not found: 1054 unknown column '0' in 'field list'

 

这时,需要使用 expression:

user::find()->select(['id', new expression('0 as is_constant')])->asarray()->all()