前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TP框架数据库column方法使用SQL函数返回异常

TP框架数据库column方法使用SQL函数返回异常

作者头像
jwj
发布2022-05-18 11:46:42
1.2K0
发布2022-05-18 11:46:42
举报
文章被收录于专栏:用户1069690的专栏

TP框架的column数据库查询方法是一个非常方便的快捷查询方法,可以用该方法快速的返回结果集中的列,并且可以指定字段作为数据集的数组下标。但是在使用SQL函数后,却异常的返回了索引数组,而不是想要的关联数组。

我想查询本月每天的总营业额,所以使用了以下的方法查询

代码语言:javascript
复制
Db::table('ledger')->where('create_time', 'between', ['2020-01-01', '2020-01-31'])->group('DATE_FORMAT(ledger_date, "%m-%d")')->column('SUM(amount)', 'DATE_FORMAT(ledger_date, "%m-%d")')

我理想中的结果应该是

代码语言:javascript
复制
[
    [01-01] => 100.00,
    [01-02] => 200.00,
    [01-03] => 210.00,
    ...
]

但结果却是

代码语言:javascript
复制
[
    0 => 100.00,
    1 => 200.00,
    2 => 210.00,
    ...
]

这不对劲啊,怎么返回了索引数组,不是关联数组? 然后就看代码,断点调试,终于发现了问题,竟然是一个小小的空格导致的!!! 原来,我使用了SQL函数

代码语言:javascript
复制
DATE_FORMAT(ledger_date, "%m-%d")

然后TP框架在处理SQL列名称的时候,会以,分割列名称,然后使用trim来去除空格

代码语言:javascript
复制
$field = array_map('trim', explode(',', $field));

所以实际去查询的时候,列名称,两边的空格都被去除了,变成了

代码语言:javascript
复制
SELECT DATE_FORMAT(ledger_date,"%m-%d"),SUM(amount) FROM `ledger` ....

但是索引的字段名没变,所以最终

代码语言:javascript
复制
DATE_FORMAT(ledger_date, "%m-%d")

不等于

代码语言:javascript
复制
DATE_FORMAT(ledger_date,"%m-%d")

导致没能生成关联数组

最终的解决方法是,我们使用之前就把逗号两边的空格都去掉,就能得到自己想要的了。

代码语言:javascript
复制
Db::table('ledger')->where('create_time', 'between', ['2020-01-01', '2020-01-31'])->group('DATE_FORMAT(ledger_date,"%m-%d")')->column('SUM(amount)', 'DATE_FORMAT(ledger_date,"%m-%d")')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档