2017-01-13 3 views
0

У меня есть приложение Laravel для старых приложений. В одном из методов, они закодированы запрос с использованием сырой SQL, как это:Pagination не работает в Laravel

$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; 

Однако, когда я пытаюсь повторить $applicants->links(), ничто не распечатаны.

Если я изменю размер лимита (как показано ниже), он отображает ссылки, хотя и неверные ссылки.

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

Как это исправить?

ответ

1

Согласно documentation, параметры для Paginator::make являются

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

Это имеет смысл, почему первый вариант не показывать какие-либо страницы; поскольку ваш запрос имеет предел, применяемый сырым запросом, количество кандидатов (второй параметр) будет соответствовать количеству элементов в первом параметре, поэтому он будет считать, что все элементы соответствуют одной странице.

Вместо того, чтобы создавать Paginator вручную, я бы предложил позвонить по телефону paginate по запросу.

+0

запрос действительно большой Это был всего лишь образец, который я написал, они хотят исправить, не нарушая запрос. Вы можете что-то предложить. – Vikram

+0

Я обновил полный запрос – Vikram