2015-01-20 2 views
2

Здравствуйте, когда я делаю поиск для того, то я не могу получить мои заказы постраничными (5 заказов на страницу) ..Разбивка не работает после выполнения поиска Laravel

Я также записанный я показать вам проблему, что я в настоящее время имеем:

ссылка: https://www.youtube.com/watch?v=sffTI6adS7A&feature=youtu.be

Это код, который я использую:

OrdersController.php:

public function post_search() 
{ 
    $keyword=Input::get('keyword'); 

    if(empty($keyword)) 
     return Redirect::route('user.orders.index')->with('error_search', 'Er was geen zoekterm ingevuld, probeer het nog eens.'); 

    //$orders = Order::with('client')->get(); 
    //$orders= new stdClass; 
    //$orders->foo=Order::search($keyword)->paginate(5); 
    $orders=Order::search($keyword); 
    $msg=""; 

    if (!count($orders)) { 
     $msg="There were no orders found."; 
    }else{ 
     $msg="There were orders found"; 
    } 

    $orders = Paginator::make($orders, count($orders), 5); 

    foreach($orders as &$order){ 

     //we initialize ordertask 
     $order->ordertask = Ordertask::where('id_order', '=', $order->id)->get(); 

    } 

    return View::make('user.orders.index', compact('orders', 'msg')); 

} 

Order.php:

public static function search($keyword){ 

DB::connection()->getPdo()->quote($keyword); 

    $result = DB::Select(DB::raw('SELECT orders.*, tasks_x.task_all 
     FROM orders LEFT JOIN (SELECT GROUP_CONCAT(tasks.task_name SEPARATOR ",") 
     AS task_all, ordertasks.id_order 
      FROM tasks JOIN ordertasks 
      on ordertasks.id_task = tasks.id GROUP BY ordertasks.id_order) as tasks_x 
      ON tasks_x.id_order = orders.id WHERE orders.order_name 
      LIKE "%'.$keyword.'%" OR tasks_x.task_all LIKE "%'.$keyword.'%"')); 

    return $result;   
} 

Что я пробовал:

Я изменил форму действия для GET и POST, но это не сработало.

Может кто-нибудь может помочь мне, пожалуйста?

ответ

2

Вы не можете разбивать страницы на необработанные запросы, используя larvel paginator. Вы можете обрабатывать запросы только с помощью построителя запросов или модели Eloquent.

Вам нужно будет вручную развернуть запрос (используя LIMIT в вашем запросе), а затем использовать Paginator :: Make(), чтобы отобразить вид paginator. Кроме того, вам нужно будет получить количество элементов с другим запросом, так как использование count() по массиву результатов даст вам количество результатов на этой странице (Как правило, размер страницы, за исключением последней страницы)

Другой вариант должен был бы изменить из этого сырого запроса на запрос, сделанные с помощью конструктора запросов, но Laravel не рекомендует это, как вы используете «Group By» и официальные документы говорит:

Примечание: В настоящее время операции разбиения на страницы, которые используют оператор groupBy, не могут быть эффективно выполнены Laravel. Если вам нужно использовать groupBy с разбитым на страницы набором результатов, рекомендуется запросить базу данных вручную и использовать Paginator :: make.

Official Doc

+0

О, я уже использую paginator :: make() в моем коде выше. Я отредактировал мой вопрос: ссылка: http://pastebin.com/uY1maxxC Как вы можете видеть, я добавил «LIMIT» в свой запрос. Но я не знаю, где использовать count() в моем запросе. Можете ли вы или кто-то другой помочь мне, пожалуйста? – superkytoz

2

Это то, что я в каждом поиске постраничной:
контроллер

$query = new Product(); 

//dynamic search term 
if (Input::has('code')){ 
    $term = Input::get('code'); 
    $term = trim($term); 
    $term = str_replace(" ", "|", $term); 
    $query = $query->whereRaw("itemcode regexp '".$term."'"); 
if (Input::has('description')){ 
    $term = Input::get('description'); 
    $term = trim($term); 
    $term = str_replace(" ", "|", $term); 
    $query = $query->whereRaw("itemcode regexp '".$term."'"); 
} 
//if there are more search terms, just copy statements above 

$products = $query->paginate(50); //get 50 data per page 
$products->setPath(''); //in case the page generate '/?' link. 
$pagination = $products->appends(array('code' => Input::get('code'), 
    'description' => Input::get('description') 
    //add more element if you have more search terms 
)); 
//this will append the url with your search terms 

return redirect('product')->with('products', $products)->with('pagination', $pagination); 

Посмотреть

<div class="panel panel-default"> 
    <div class="panel-heading"> 
     <h6 class="panel-title"><i class="icon-paragraph-justify"></i> Striped &amp; bordered datatable</h6> 
    </div> 
    <div class="datatable"> 
     <table class="table table-striped table-bordered"> 
      <thead> 
       <tr> 
        <th>#</th> 
        <th>Item Code</th> 
        <th>Description</th> 
       </tr> 
      </thead> 
      <tbody> 
       @foreach($products as $key) 
       <tr> 
        <td>{{ $key->id}}</td> 
        <td>{{ $key->itemcode }}</td> 
        <td>{{ $key->description }}</td> 
       </tr> 
       @endforeach 
      </tbody> 
     </table> 
    </div> 
</div> 
{!! $products->render() !!} 
+0

Это трюк для меня :). Спасибо! –

Смежные вопросы