You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Eloquent中使用DB::raw查询如何获取驼峰式别名?

解决Laravel DB::raw别名自动转小写的问题

这个问题的核心原因是:当你使用DB::raw()时,Laravel不会对里面的SQL别名做格式处理,而是直接传递给数据库执行。很多数据库(比如PostgreSQL默认配置、MySQL开启lower_case_table_names时)会将未被引号包裹的标识符(包括列别名)自动转换为小写,这就导致你定义的PhotoImage变成了photoimage,而普通select()里的别名因为Laravel内部做了处理,所以能保持驼峰格式。

下面是几种可行的解决方案:

1. 给DB::raw里的别名添加引号

根据你使用的数据库类型,选择对应的引号包裹别名:

  • PostgreSQL:使用双引号"包裹别名
  • MySQL:使用反引号`包裹别名

修改后的查询代码示例(以PostgreSQL为例):

IDProofDetails::select(
    'idproof_details.idproof_id as IDNumber',
    'idproof_types.lcode_id_proof_name as idProofType',
    DB::raw("ENCODE(CONVERT_TO(photo, 'UTF-8'), 'base64') as \"PhotoImage\"")
)
->leftJoin('idproof_types', 'idproof_types.id', '=', 'idproof_details.id_proof_type_id')
->get();

如果是MySQL,只需要把引号换成反引号:

DB::raw("ENCODE(CONVERT_TO(photo, 'UTF-8'), 'base64') as `PhotoImage`")

2. 使用selectRaw替代DB::raw

你也可以用selectRaw()方法来替代DB::raw(),写法更简洁,同样需要给别名加引号:

IDProofDetails::select(
    'idproof_details.idproof_id as IDNumber',
    'idproof_types.lcode_id_proof_name as idProofType'
)
->selectRaw('ENCODE(CONVERT_TO(photo, \'UTF-8\'), \'base64\') as "PhotoImage"')
->leftJoin('idproof_types', 'idproof_types.id', '=', 'idproof_details.id_proof_type_id')
->get();

这样修改后,查询返回的结果里PhotoImage就能保持你想要的驼峰格式了:

[
    "IDNumber" => "df23redf",
    "idProofType" => "AADHAR",
    "PhotoImage" => null
]

内容的提问来源于stack exchange,提问作者arshad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:48:51