YII 中使用 Expression解決查詢中帶有常量報錯的問題

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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章