【问题标题】:Search results pagination using Laravel Scout使用 Laravel Scout 进行搜索结果分页
【发布时间】:2019-06-15 01:36:34
【问题描述】:

我在使用 Laravel ScoutTNTSearch driver 时遇到了分页问题。例如,我想搜索关键字“产品 80”。 URL 是localhost/search?keyword=product+80,当我转到下一页时,URL 变为localhost/search?query=Product%2080&page=2. 它不会在搜索结果中显示任何内容。当我手动将 URL 更改为 localhost/search?keyword=product+80&page=2 时,它工作正常,我该如何修复它?。

搜索栏

<form action="{{ route('products.search') }}" method="get" class="search">   
    <input class="form-control" type="text" name="keyword" placeholder="Search">
    <button type="submit" class="btn"><i class="mdi mdi-magnify"></i></button> 
</form>

路线

Route::get('/search', 'ProductController@search')->name('products.search');

控制器

public function search(Request $request)
{
  $keyword = $request->keyword;
  $products = Product::search($keyword)->paginate(20);

  return view('search.index', compact('keyword', 'products'));
}

查看

<div class="container">
  @foreach ($products as $product)
    <div class="col-md-6 col-lg-3">
      <div class="card">
        <div class="card-body">
          <h5 class="card-title">{{ $product->name }}</h5>
        </div>
      </div>
    </div>
  @endforeach

  {{ $products->links() }}
</div>

dd($request->all())

array:1 [▼
  "keyword" => "Product 80"
]

dd($products)

LengthAwarePaginator {#315 ▼
  #total: 100
  #lastPage: 5
  #items: Collection {#340 ▼
    #items: array:20 [▼
      0 => Product {#363 ▶}
      1 => Product {#344 ▶}
      2 => Product {#353 ▶}
      3 => Product {#361 ▶}
      4 => Product {#360 ▶}
      5 => Product {#359 ▶}
      6 => Product {#358 ▶}
      7 => Product {#357 ▶}
      8 => Product {#356 ▶}
      9 => Product {#355 ▶}
      10 => Product {#354 ▶}
      11 => Product {#352 ▶}
      12 => Product {#362 ▶}
      13 => Product {#351 ▶}
      14 => Product {#350 ▶}
      15 => Product {#349 ▶}
      16 => Product {#348 ▶}
      17 => Product {#347 ▶}
      18 => Product {#346 ▶}
      19 => Product {#345 ▶}
    ]
  }
  #perPage: 20
  #currentPage: 1
  #path: "http://marketplace.test/search"
  #query: array:1 [▼
    "query" => "Product 80"
  ]
  #fragment: null
  #pageName: "page"
  +onEachSide: 3
}

dd($request->keyword)

"Product 80"

dd($request->query)

ParameterBag {#50 ▼
  #parameters: array:1 [▼
    "keyword" => "Product 80"
  ]
}

【问题讨论】:

  • 你能展示你的 Product::search 功能吗?我猜它可能只是试图分裂+%20 是一个空格,所以你应该也可以把它分开。
  • 查询参数如何从keyword变为query?你能向我们展示你的完整刀片吗?
  • 由于上述更改,$request-&gt;keyword 将是 NULL。因此,没有结果。
  • @aynber 我用的是tntsearch,不知道你说的是哪个函数
  • 请发布dd($request-&gt;all());dd($products);dd($request-&gt;keyword);dd($request-&gt;query);的输出。

标签: php laravel search pagination


【解决方案1】:

为了使分页正常工作,Laravel 需要一个特定的查询名称。因此,只需将您的 html 更改为:

<input class="form-control" type="text" name="query" placeholder="Search">

在你的控制器中:

$keyword = $request->query;

【讨论】:

    【解决方案2】:

    这应该可行:

    public function results(Request $request)
    {
        $request->flashOnly('q');
        $products = Product::search($request->q)->paginate(5);
        $procucts->withPath('results');
    }
    

    看这里Laravel Documentation Requests

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-07
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多