laravel 自定义数据分页

        $user = auth('api')->user();
//        if (!$user) {
//            return $this->failed('获取不到用户信息!');
//        }
        $user_id = $user->id??1;
        $company_id = $user->company_id??1;
        $user_department_id = $user->department_id??26;
        $now_time = date("Y-m-d H:i:s");

        $meeting_reserve = FormMeetingRoomReserve::select('id','uid', 'meeting_room_id', 'leader_id', 'participant', 'participant_dep', 'subject', 'office', 'use_date_start', 'use_date_end')
            ->selectRaw('DATE_FORMAT(use_date_start,"%Y-%m-%d") as use_date')
            ->with(['meeting_room' => function ($query) {
            $query->select('id', 'name');
        }, 'staff' => function ($query) {
            $query->select('id', 'name');
        }])->where([['state', '=', FormState::FINISH], ['status', '!=', FormMeetingRoomReserve::STATUS_CANCEL]])
            ->where(function ($query) use ($now_time) {
                $query->where('use_date_start', '>=', $now_time)
                    ->orwhere([['use_date_start', '<=', $now_time], ['use_date_end', '>=', $now_time]]);
            })->orderBy('use_date_start')
            ->get()
            ->toArray();


        $personal_meeting_reserve_arr = self::getStaffMeetingReserve($meeting_reserve, $user_id, $company_id, $user_department_id);

        $data=[];
        $week_array=array("周日","周一","周二","周三","周四","周五","周六");
        //当前页数 默认1
        $page = $request->page ?: 1;
        //每页的条数
        $perPage = empty($request->page_size) ? 20 : $request->page_size;
        //计算每页分页的初始位置
        $offset = ($page * $perPage) - $perPage;

        foreach ($personal_meeting_reserve_arr as $personal_meeting) {
            $week =$week_array[date('w',strtotime($personal_meeting['use_date']))];
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['id'] = $personal_meeting['id'];
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['subject'] = $personal_meeting['subject'];
            if ($personal_meeting['use_date_start'] > $now_time) {
                $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['is_start'] = '未开始';
            } elseif ($now_time >= $personal_meeting['use_date_start'] && $now_time <= $personal_meeting['use_date_end']) {
                $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['is_start'] = '进行中';
            }
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['room_name'] = $personal_meeting['meeting_room']['name'] ?? $personal_meeting['office'];
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['build_name'] = $personal_meeting['staff']['name'];
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['participant_name'] = $this->getStaff($personal_meeting['participant']);
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['participant_dep_name'] =$this->participantDep($personal_meeting['participant_dep']);
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['use_date_start'] = $personal_meeting['use_date_start'];
            $data[$personal_meeting['use_date'].' '.$week][$personal_meeting['id']]['use_date_end'] = $personal_meeting['use_date_end'];
            $data[$personal_meeting['use_date'].' '.$week ][$personal_meeting['id']]['use_week'] = $week_array[date('w',strtotime($personal_meeting['use_date_start']))];
        }
        $data = new LengthAwarePaginator(array_slice($data, $offset, $perPage, true), count($data), $perPage, $page,
            ['path' => $request->url(), 'query' => $request->query()]);

        return $this->success($data);

  

posted @ 2022-09-22 16:10  星云惊蛰  阅读(8)  评论(0)    收藏  举报