ThinkPHP6手册里没有的一些用法
2021-04-10 09:26
标签:更新 time 统计 方法 class 需要 raw 错误 会员 一、COUNT()方法统计去重: 二、ThinkPHP3.2里面的WHERE的数组参数可以设置_string来接收字符串查询条件,跟数组查询条件一起混合成一个数组传给WHERE作为查询条件。ThinkPHP6使用Db::raw()替代了_string来实现混合查询。 三、Query对象可以复用,只要修改WHERE查询条件就可以了,这样代码冗余少些,效率也高些: ThinkPHP6手册里没有的一些用法 标签:更新 time 统计 方法 class 需要 raw 错误 会员 原文地址:https://www.cnblogs.com/macliu/p/12432180.html//链式操作最后是COUNT()方法结尾时,distinct要放到COUNT方法里面的字段参数前面才起统计去重作用
//错误的写法:
$query->distinct(true)->field(‘ots.order_no‘)->where($map)->count();
//将生成这样的sql
SELECT DISTINCT COUNT(*) AS think_count FROM `order_ticket_sell`
//正确的写法:
$query->where($map)->count(‘distinct ots.order_no‘);
//将生成这样的sql
SELECT COUNT(DISTINCT `ots`.`order_no`) AS think_count FROM `order_ticket_sell`
使用Db::raw()也可以对字段使用mysql函数://原来ThinkPHP3.2这样写的:
if(empty($count_type))
{
$map[‘sell_time‘] = array(array(‘neq‘,‘null‘),array(‘EGT‘,$dtBegin),array(‘ELT‘,$dtEnd))$tsort = ‘order_ticket_sell.sell_time desc‘;
}
else
{
$map[‘_string‘] = "CONCAT(tic_feature.date,‘ ‘,tic_feature.time)>=‘" . $dtBegin . "‘ and CONCAT(tic_feature.date,‘ ‘,tic_feature.time)$dtEnd . "‘";
$tsort = ‘tic_feature.date desc, tic_feature.time desc‘;
}
//现在ThinkPHP6可以改成这样了:
if(empty($count_type)){
$key_map[‘sell_time‘] = array(‘ots.sell_time‘, ‘between‘, array($dt_begin,$dt_end));
$tsort = [‘ots.sell_time‘=>‘desc‘];
} else {
$tic_ft_raw = Db::raw("CONCAT(tic_f.date,‘ ‘,tic_f.time)");
$key_map[‘tic_ft_time‘] = array($tic_ft_raw, ‘between‘, [$dt_begin, $dt_end]);
$tsort = [‘tic_f.date‘=>‘desc‘, ‘tic_f.time‘=>‘desc‘];
}
//ThinkPHP6不像ThinkPHP3.2的WHERE那样能用关联数组了,所以自己建个关联数组来存放查询条件,以便需要修改或删除某个查询条件的时候,可以使用关联键方便的修改或UNSET掉关联键。例如下面的查询不需要pay_method这个查询条件了:
UNSET($key_map[‘sell_time‘]);//然后把删掉了pay_method后的查询条件再提出来,以便放到WHERE里去:
$map = array_values($key_map[‘sell_time‘]);//如果是一直在复用最初创建的Query对象,记得要先removeOption(‘where‘),然后再放到新调用的WHERE里去,否则不是更新WHRER条件,而是在原来的WHERE条件后面附加WHERE条件:
$key_map[‘pay_method‘] = array(‘otd.pay_method‘,‘=‘,1); //会员卡支付
$map = array_values($key_map);
$ots_query->removeOption(‘where‘);
$cardpaytotal = $ots_query->where($map)->sum(‘price‘);
‘sell_time‘
文章标题:ThinkPHP6手册里没有的一些用法
文章链接:http://soscw.com/index.php/essay/73730.html