测试代码:
public static function sold()
{
$d1 = date('Y-m-d', strtotime('-7 day'));
$d2 = date('Y-m-d', strtotime('-1 day'));
$map = db(self::TABLE)
// ->whereBetweenTime('date', $d1, $d2)
->group('repo_good_id,date')
->column('sum(num) as sold', 'repo_good_id');
return $map;
}运行后,得到的$map结果为空数组,但是实际上拿执行的sql语句去数据库里查是有一条数据的!为什么这样的写法就得不到结果呢,断点跟踪下来,发现是类为column中无原生列导致。看2张图:
图片无法上传,尴尬啊。。。
上传附件,http 521错误,咱整!
算了,文字描述下。
关键代码在:vendor/topthink/think-orm/src/db/PDOConnection.php 第1160行,
$result = array_column($resultSet, $column, $key);
执行这句前,$resultSet里是有一行数据的,但此时,$column是"sum(num) as sold", 所以在执行array_column后,得到的$result为[]。
我想这里可能是作者觉得太烦才这样草草忽略的吧,因为$resultSet里每行数据的键是repo_good_id和sold,而并没有“sum(num) as sold”,所以就取不到数据了!这未免有点可惜,我那样的写法就无法得到预期的结果了!
最佳答案