如何在Laravel Searchy扩展中应用分页

问题描述

我已经在laravel应用程序中实现了一个扩展名-https://github.com/livelyworks/Laravel-Searchy

这里我无法申请分页

$str = preg_replace('/[^A-Za-z0-9\. -]/','',$query);
$searchdata = Searchy::search('snippets')
  ->fields('snippets_name','SEO_description','snippets_description','snippet_tags')
  ->query($str)
  ->getQuery()
  ->limit(20)
  ->get();

解决方法

在第1页的-> limit()之后添加-> offset(0)。下一页:偏移量+限制,上一页:偏移量-限制。

假设$ page第一页为1,第二页为2:

$offset = 20 * ($page??1 - 1)
$searchdata = Searchy::search('snippets')->fields('snippets_name','seo_description','snippets_description','snippet_tags')->query($str)
->getQuery()->limit(20)->offset($offset)->get();

更新:

如果要使用分页查询构建器:

$str = preg_replace('/[^A-Za-z0-9\. -]/','',$query);
$searchdata = Searchy::search('snippets')
  ->fields('snippets_name','snippet_tags')
  ->query($str)
  ->getQuery()
  ->paginate(20);

可见

@foreach($searchdata as $data)
    // show data
@endforeach

{{ $searchdata->links() }}

url:

您的网址/ 1 your_url / 2 your_url / 3 ...

但是如果您想使用查询限制:

public function your_function_page($page=1) {

    $limit = 20;
    $offset = $limit * ( $page > 0 ? $page - 1 : 0 );

    $str = preg_replace('/[^A-Za-z0-9\. -]/',$query);
    
    $query = Searchy::search('snippets')->fields('snippets_name','snippet_tags')
                        ->query($str);

    $searchdata = $query->getQuery()
                        ->limit($limit)
                        ->offset($offset)
                        ->get();

    $total_data = $query->get()
                        ->count();

    $total_page = ceil( $total_data / $limit );

    $link_pagination = 'url';
    $pagination = collect();
    for ($i=0; $i < $total_page ; $i++) { 
        $numb = $i + 1; 
        $link = $link_pagination . '/' . $numb;
        $pagination[] = '<a href="' . $link . '">' . $numb . '</a>';
    }
    $pagination = $pagination->join(" ");

    return view('your_page_data')
            ->with('searchdata',$searchdata)
            ->with('pagination',$pagination);

}

视图中:

@foreach($searchdata as $data)
    // show data
@endforeach

{{ $pagination }}

url:

您的网址/ 1 your_url / 2 your_url / 3 ...

,

尝试一下:

$searchdata = Searchy::search('snippets')
        ->fields('snippets_name','snippet_tags')
        ->query($str)
        ->getQuery()
        ->take($numPerPage)
        ->get();