dongqingchan2385 2017-01-13 14:18
浏览 42

分页不在Laravel工作

I have a legacy Laravel application. In one of the methods, they've coded a query using raw SQL like this:

$sql =  "select * from (select `o`.`order_id`, `o`.`order_status_id`, `o`.`business_type`, 
            `o`.`university_name`, `o`.`first_name`, `o`.`last_name`, `o`.`email`, `o`.`telephone`, `o`.`enrollment_no`, 
            `o`.`application_no`, `o`.`date_added`, `o`.`term_id`, `os`.`name` as `order_status`, `u`.`id` as `user_id`,`cso`.`last_call_time`,`cso`.`next_call_time`,
            `oss`.`name` as `order_sub_status`, `o`.`total`, `o`.`product_id`, `bm`.`batch_name`, `o`.`university_enrollment_no`,
            `ptb`.`current_term_id` as `current_batch_term`, `tm`.`type` as `term_type`, `tm`.`value`,`u`.`name` as `username`
            from `order` as `o` 
            inner join `order_status` as `os` on `os`.`order_status_id` = `o`.`order_status_id` 
            left join `call_schedule_order` as `cso` on `cso`.`order_id`= `o`.`order_id`
            left join `order_sub_status` as `oss` on `oss`.`order_sub_status_id` = `o`.`order_sub_status_id` left join `batch_master` as `bm` on `bm`.`batch_id` = `o`.`batch_id` 
            left join `term_master` as `tm` on `tm`.`term_id` = `o`.`term_id` left join `order_dropout_status` as `ods` on `ods`.`reason_id` = `o`.`reason_id` left 
            join `product_term_batch` as `ptb` on `ptb`.`batch_id` = `o`.`batch_id` and `ptb`.`product_id` = `o`.`product_id`
            left join collection_user as cu on cu.order_id = o.order_id
            left join users as u on u.id = cu.user_id
            where `o`.`order_status_id` in (".implode(',',$order_status).")";

            //$sql .= "and cu.payment_done != 'yes'";

    if($is_manager == 'no')
    {
        $sql .= "and u.id = '".$user_id."'";
    }           

    if(isset($filter['order_id']) and $filter['order_id']!=''  ){
        $sql .= " and o.order_id = '".$filter['order_id']."'";
    }

    if(isset($filter['application_no']) and $filter['application_no']!=''  ){
        $sql .= " and o.application_no = '".$filter['application_no']."'";

    }

    if(isset($filter['enrollment_no']) and $filter['enrollment_no']!=''  ){
        $sql .= " and o.enrollment_no = '".$filter['enrollment_no']."'";
    }

    if(isset($filter['university_enrollment_no']) and $filter['university_enrollment_no']!=''  ){
        //$sql->where('o.university_enrollment_no','LIKE','%'.$filter['university_enrollment_no'].'%');
        $sql .= " and o.university_enrollment_no = '".$filter['university_enrollment_no']."'";
    }

    if(isset($filter['university_id']) and $filter['university_id']!=''  ){
        //$sql->where('o.university_id','=',$filter['university_id']);
        $sql .= " and o.university_id = '".$filter['university_id']."'";
    }

    if(isset($filter['name']) and $filter['name']!=''  ){

        $sql .= " and (o.first_name LIKE '%".$filter['name']."%'
                    or o.last_name LIKE '%".$filter['name']."%')";
    }

    if(isset($filter['phone']) and $filter['phone']!=''  ){
        $sql .= " and o.telephone LIKE '%".$filter['phone']."%'";
    }

    if(isset($filter['email']) and $filter['email']!=''  ){
        $sql .= " and o.email LIKE '%".$filter['email']."%'";
    }

    if(isset($filter['order_status_id']) and $filter['order_status_id']!=''  ){
        $sql .= " and o.order_status_id = '".$filter['order_status_id']."'";
    }

    if(isset($filter['batch'])){
        $sql .= " and bm.batch_id in (".implode(',',$filter['batch']).")";
    }

    if(isset($filter['order_status'])){
        $sql .= " and o.order_status_id in (".implode(',',$filter['order_status']).")";
    }

    if(isset($filter['order_sub_status'])){
        $sql .= " and o.order_sub_status_id in (".implode(',',$filter['order_sub_status']).")";
    }

    if(isset($filter['user'])){
        $sql .= " and u.id in (".implode(',',$filter['user']).")";
    }

    if(isset($filter['due_calls'])){
        $time = date('Y-m-d H:i:s');
        $sql .= " and cso.user_id = '".$user_id."'";
        $sql .= " and cso.next_call_time < '".$time."'";
     }

    if( isset($filter['scheduled_call']) and $filter['scheduled_call']!='' and $filter['scheduled_call'] == 'show' ){
        $sql .= " and cso.user_id = '".$user_id."'";
        $sql .= " and cso.next_call_time IS NOT NULL";
        $sql .= " order by `cso`.`updatedAt` asc";
    }

    if( isset($filter['call_status_id']) and $filter['call_status_id']!=''  ){
        $sql .= " and cso.user_id = '".$user_id."'";
        $sql .= " and cso.call_status_id NOT IN (1,2,5,6,9,10,12)";
        $sql .= " order by `cso`.`updatedAt` asc";

    }

    if( isset($filter['UNSCH_call_status_id']) and $filter['UNSCH_call_status_id']!=''  ){
        $sql .= " and cso.user_id = '".$user_id."'";
        $sql .= " and cso.call_status_id IN (1,2,5,6,9,10,12)";
        $sql .= " order by `cso`.`updatedAt` asc";

    }

    if(!isset($filter['UNSCH_call_status_id']) && !isset($filter['call_status_id']) && !isset($filter['scheduled_call']))
    $sql .= " order by `o`.`order_id` asc";

    $sql .= ") as x
             group by x.order_id LIMIT ".$page.",".$limit;

$applicants = DB::Select($sql);
$applicants = Paginator::make($applicants, count($applicants), $limit);
return $applicants;

However, when I try to echo $applicants->links(), nothing gets printed out.

If I change the limit size (as shown below), it displays links, albeit incorrect links.

$applicants = Paginator::make($applicants, count($applicants), $limit - 10);

How can I fix this?

  • 写回答

1条回答 默认 最新

  • dongtang1918 2017-01-13 14:28
    关注

    According to the documentation, the parameters for Paginator::make are

    Paginator::make($items, $totalItems, $perPage);
    

    That makes sense why the first version didn't show any pages; since your query has a limit applied by the raw query, the count of applicants (second parameter) will match the number of items in the first parameter, so it'll assume all the items fit on one page.

    Instead of creating the Paginator manually, I would suggest calling paginate on the query directly.

    $applicants = DB::table('Oder')
        ->where('order_id', $order_id)
        ->paginate(10); // replacing 10 with your items-per-page
    
    return $applicants;
    
    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100