YII--查询多条最新记录

本文介绍了一种自动处理用户反馈系统中过期反馈单的方法,通过查询未关闭的反馈单及其最新回复,判断是否满足10天内无用户回应的条件,进而自动关闭反馈单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、实际情景

实际工作中遇到一个用户反馈管理的功能开发,其中用户提交一个反馈单,管理员可以回复用户的反馈单,用户也可以回复管理员回复的消息,每次回复都会生成一条对应反馈单的回复单记录,即一条反馈单对应多条回复单。当管理员回复之后如果用户10天之内没有做出回复则关闭这条反馈单。

2、思路

先得到所有未关闭的反馈单id,然后根据这个id找出每一个id对应的最新的回复信息,判断这条回复记录时候是管理员回复而且时间大一10天,如果是,将这条反馈单id存储到数组中,最后数组里存储的就是所有需要改变状态的反馈单的反馈单id。

3、代码实现:

public static function webCloseFeedback()
    {
        //得到所有未关闭的反馈单id,并将id对应的值存储在数组中
        $feedback_ids=UserFeedbackRecord::find()
            ->select(['feedback_sheet_id'])
            ->where(['feedback_state'=>[1,2]])
            ->orderBy('feedback_sheet_id')
            ->asArray()
            ->all();
        $arry1=array();
        for($i=0;$i<count($feedback_ids);$i++){
            array_push($arry1,$feedback_ids[$i]['feedback_sheet_id']);
        }
        //根据回复时间降序查询出所有未关闭反馈的回复记录
        $last_reply_msg=ReplyMessage::find()
            ->where(['feedback_sheet_id'=>$arry1])
            ->orderBy('reply_time desc')
            ->asArray()
            ->all();
        //判断是否满足关闭条件,如果满足,将反馈单id存储到数组中
        $change_ids=array();
        foreach ($arry1 as $value){
            foreach ($last_reply_msg as $val){
                if($val['feedback_sheet_id']==$value){
                    $current=strtotime(date("y-m-d h:i:s"));
                    $max=$val['reply_time'];
                    $maxtime=strtotime($max);
                    $day=ceil(($current-$maxtime)/86400);
                    if($day>10&&$val['reply_people']==0){
                        array_push($change_ids,$value);
                    }
                    break;
                }
            }
        }
        //最后更改反馈单状态
        UserFeedbackRecord::updateAll(['feedback_state'=>3],['feedback_sheet_id'=>$change_ids]);
    }

4、注意:

不应该将查询反馈单对应的最后一条回复记录放在循环中,这样会大大增加数据库的压力。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值