我想得到一个不存在的列,但返回错误正常的方式是:
SELECT 1 AS flag....
在yii中:
Model::find()->select("1 AS flag, ...)...
问题是查询返回顶点
SELECT `1` AS `flag`
我已经尝试了数组,但结果是一样的。我该怎么办?谢了加布里埃莱
z31licg01#
函数findBySql可能适合你:
findBySql
$sql = 'SELECT 1 as flag ...'; $model = Model::findBySql($sql)->all();
vlurs2pr2#
除了gmcanswer之外,您还可以在模型类中声明变量,然后在query中作为alias使用。
class YourModelName extends ActiveRecord { public $flag; }
然后你下面的查询将工作。
希望有帮助!
0vvn1miw3#
我在Yii文档中发现了这个细节之后找到了一个解决方案:https://www.yiiframework.com/doc/api/2.0/yii-db-query#select()-detail除非列包含括号(这意味着该列包含DB表达式),否则该方法将自动对列名加上引号所以...如果你选择一个固定的字符串,你可以将所选的“列” Package 在一个字符串函数中,比如LTRIM(),它除了欺骗Yii不要用反引号引用字符串之外,什么都不会做。
LTRIM()
Model::find()->select("LTRIM(1) AS flag, ...)...
您还需要按照前面的建议添加flag作为模型的属性,然后您可以使用查询的输出$Model->flag。
flag
$Model->flag
3条答案
按热度按时间z31licg01#
函数
findBySql
可能适合你:vlurs2pr2#
除了gmcanswer之外,您还可以在模型类中声明变量,然后在query中作为alias使用。
然后你下面的查询将工作。
希望有帮助!
0vvn1miw3#
我在Yii文档中发现了这个细节之后找到了一个解决方案:
https://www.yiiframework.com/doc/api/2.0/yii-db-query#select()-detail
除非列包含括号(这意味着该列包含DB表达式),否则该方法将自动对列名加上引号
所以...如果你选择一个固定的字符串,你可以将所选的“列” Package 在一个字符串函数中,比如
LTRIM()
,它除了欺骗Yii不要用反引号引用字符串之外,什么都不会做。您还需要按照前面的建议添加
flag
作为模型的属性,然后您可以使用查询的输出$Model->flag
。