easyswoole
easyswoole copied to clipboard
ORM groupby和count一起使用bug
$model = new Wallet(); $res = $model->group('chain_id')->count(); var_dump($res); //var_dump($model->lastQuery()); var_dump($model->lastQuery()->getLastQuery());
$model = new Wallet();
$res = $model->group('chain_id')->sum('id');
var_dump($res);
var_dump($model->lastQuery()->getLastQuery());
今天用sum 也是有这样的bug 打印sql是多了个limit 1
好久了 望修复
@kiss291323003 @XueSiLf @Stitch-June @xuhaoxian @tioncico @evalor @davidzhang12138
好的,马上修复
这边测试发现你用法用错了,应该使用如下方式:
$model = new Wallet();
// $res = $model->field('count(`id`) as id_counts')->group('chain_id')->all();
$res = $model->field('count(`id`)')->group('chain_id')->all();
$isReturnCollection = \EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL.returnCollection');
$ret = [];
if ($isReturnCollection) {
$ret = $res->toArray(false, false);
} else {
if (!empty($res)) {
foreach ($res as $key => $value) {
$ret[] = $value->toArray(false, false);
}
}
}
var_dump($model->lastQuery()->getLastQuery());
var_dump($ret);
在tp情况下运行您提供的代码也是带有 limit 1 的。
$model = new Wallet();
// $res = $model->group('chain_id')->field('count(`id`)')->select();
$res = $model->group('chain_id')->count();
echo '<pre>';
var_dump($res);
// var_dump(collection($res)->toArray());
var_dump($model->getLastSql());
tp下运行结果:
int(3)
string(110) "SELECT COUNT(*) AS tp_count FROM ( SELECT count(*) FROM `wallet` GROUP BY `chain_id` ) `_group_count_` LIMIT 1"