根據用戶名查詢訂單

一、需求

  • 前端頁面(列表顯示訂單數據),有2個輸入框:請輸入訂單號,請輸入用戶名,根據輸入的內容獲取到訂單,顯示在表格(分頁)。

二、表部分字段

  • 訂單表:id,order_sn,user_id,create_time,…
  • 用戶表:id,username,…

三、思路

由表設計可知,用戶名沒存在訂單表,只有通過user_id來查,所以當輸入用戶名後。根據用戶名在用戶表得到id,根據用戶表的id,去IN查詢訂單表的user_id

別說:爲什麼不冗餘username字段到order表?我這裏只是針對這類的案例給個思路

  • 輸入訂單號時:直接在訂單表模糊查詢即可
  • 輸入用戶名時:根據用戶名在用戶表得到id,根據用戶表的id,去IN查詢訂單表的user_id

四、代碼

<?php

namespace app\index\controller;

class Ablog extends Base
{
    /**
     * 根據查詢參數返回結果數據
     * @param $param ['order_sn' => '1234', 'username' => '張三']
     * @param $pager ['page' => 1, 'page_size' => 10]
     * @return array
     */
    public function lists($param, $pager){
        $flag = self::processParam($param);
        if (!$flag){    //如果flag爲false,直接返回空數據
            return [ 'data' => [], 'count' => 0 ];
        }

        $orderDao = new OrderDao(); //實例化訂單表
        $data = $orderDao->query($param, ['id', 'order_sn', 'user_id', 'create_time'], $pager); //分頁查詢訂單表數據,返回格式 ['data'=>[], 'count'=>0]
        if ($data['data']){ //是 $data['data'], 不是 $data
            //獲取用戶ID對應的用戶名
            $userDao = new UserDao();   //實例化用戶表
            $userParam['id'] = ['in', array_column($data['data'], 'user_id')];  //IN查詢user表id字段
            $userList = $userDao->queryAll($userParam, ['id', 'username']); //查詢所有數據
            $userIdToName = array_column($userList, 'username', 'id');  //數據處理成 [id=>username, id=>username, ...]格式

            foreach ($data['data'] as &$value){ //循環處理訂單數據
                $value['username'] = !empty($userIdToName[$value['user_id']]) ? $userIdToName[$value['user_id']] : '未知用戶';  //判斷用戶是否存在
                $value['create_time'] = date('Y-m-d H:i:s', $value['create_time']); //[ 時間戳 1712312312 ] 轉爲 [ 日期 2024-04-05 18:18:32 ] 格式
            }
        }
        return $data;
    }

    /**
     * 處理參數
     * @param $param 待處理的參數
     * @return bool 查詢的數據是否存在:默認存在
     */
    public function processParam(&$param){
        $flag = true;
        if (!empty($param['username'])){    //如果輸入了用戶名
            $userDao = new UserDao();       //實例化用戶數據表
            $userParam['username'] = ['like', $param['username']];  //Like模糊查詢user表username字段
            $userList = $userDao->queryAll($userParam);             //查找所有數據:該用戶是否存在
            if (empty($userList)){  //如果不存在,flag設置爲false:lists()方法中直接返回空數據
                $flag = false;
            }else{  //如果存在,IN查詢order表user_id字段
                $param['user_id'] = ['in', array_column($userList, 'id')];  //IN查詢order表user_id字段
                unset($param['username']);  //刪除order表中不存在的username字段

                //tips:unset()支持一次刪除多個變量
                //unset($a, $b, $c);
            }
        }
        if (!empty($param['order_sn'])){  //如果輸入了訂單號
            $param['order_sn'] = ['like', $param['order_sn']];
        }
        return $flag;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章