Yii 官方手冊關於 Expression 的解釋:https://www.yiichina.com/doc/api/2.0/yii-db-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()