Laravel 使用分页搜索?
Laravel Searching with Pagination?
我一直很努力地想要得到这个,但我做不到。搜索也一切正常出现分页,但每当我点击任何页码时都会打开一个空白页,因为没有通往"GET" 那个请求,任何人都可以引导到某个地方,在那里我可以找到如何使用搜索查询显示其他页面,或者我是否必须创建获取路径来显示其他页面?我很困惑该怎么办?
尝试使用 GET 方法仍然无效
路线
Route::get('search/','Coins@search')->name('coin.search');
控制器
public function search(){
$keyword = Input::get('search');
if($keyword){
$result = [];
$resultByName = Coin::
where('type','=','coin')
->where('parent_id','=',0)
->where('coin_name','LIKE',"%{$keyword}%")
->orderBy('id', 'asc')
->paginate(10);
$resultByDescription = Coin::where('type','=','coin')
->where('parent_id','=',0)
->where('description','LIKE',"%{$keyword}%")
->orderBy('id', 'asc')
->paginate(10);
if($resultByName->count()) {
$result = $resultByName;
$message = "Coin Detail found in coin name !! based on searching data : ".$keyword;
}else{
if($resultByDescription->count()){
$result = $resultByDescription;
$message = "Coin Detail found in description !! based on searching data : ".$keyword;
}else{
$result = Coin::where('type','=','coin')->where('parent_id','=',0)->get();
$message = "No Coin Found !! based on searching data : ".$keyword;
}
}
return view($this->layout.'coins')->with([
'allCoins' => $result,
'message' => $message
]);
}
}
Blade
{!! Form::open([
'route' => 'coin.search'
,'method' => 'GET'
,'id' => 'coinSearch'])
!!}
<input type="text" placeholder="Search Your Coin Here . . . " name="search">
<button type="submit" class="btn btn-sm btn-primary">Search</button>
{!! Form::close() !!}
{!! $allCoins->render() !!}
分页仅适用于 GET 参数。您应该使用 GET 方法进行搜索和分页。
POST请求不是为了展示数据。为什么?原因很多。
我建议您将路由类型更改为 GET,将搜索表单方法更改为 GET。
对分页查询返回的结果对象调用appends方法。它接受一个数组作为参数,在数组中,你可以指定任意多的变量。
$results->appends ();
比如你的一个查询会变成
$resultByName = Coin::where('type','=','coin')
->where('parent_id','=',0)
->where('coin_name','LIKE',"%{$keyword}%")
->orderBy('id', 'asc')
->paginate(10);
$resultByName->appends (array ('keyword' => $keyword));
它将附加 link 中的所有变量,您的 URL 将变为
http://your_domain/search?keyword=$keyword(value of this variable)
分页将在不添加任何自定义代码的情况下工作。
好吧,显然不是我一个人解决了这个问题,但我所要做的就是像这样重新配置我的路线
Route::get('coin/search/{keyword?}', ['uses' => 'Coins@doSearch'])->name('coin.search');
Route::resource('coin' , 'Coins');
我一直很努力地想要得到这个,但我做不到。搜索也一切正常出现分页,但每当我点击任何页码时都会打开一个空白页,因为没有通往"GET" 那个请求,任何人都可以引导到某个地方,在那里我可以找到如何使用搜索查询显示其他页面,或者我是否必须创建获取路径来显示其他页面?我很困惑该怎么办?
尝试使用 GET 方法仍然无效
路线
Route::get('search/','Coins@search')->name('coin.search');
控制器
public function search(){
$keyword = Input::get('search');
if($keyword){
$result = [];
$resultByName = Coin::
where('type','=','coin')
->where('parent_id','=',0)
->where('coin_name','LIKE',"%{$keyword}%")
->orderBy('id', 'asc')
->paginate(10);
$resultByDescription = Coin::where('type','=','coin')
->where('parent_id','=',0)
->where('description','LIKE',"%{$keyword}%")
->orderBy('id', 'asc')
->paginate(10);
if($resultByName->count()) {
$result = $resultByName;
$message = "Coin Detail found in coin name !! based on searching data : ".$keyword;
}else{
if($resultByDescription->count()){
$result = $resultByDescription;
$message = "Coin Detail found in description !! based on searching data : ".$keyword;
}else{
$result = Coin::where('type','=','coin')->where('parent_id','=',0)->get();
$message = "No Coin Found !! based on searching data : ".$keyword;
}
}
return view($this->layout.'coins')->with([
'allCoins' => $result,
'message' => $message
]);
}
}
Blade
{!! Form::open([
'route' => 'coin.search'
,'method' => 'GET'
,'id' => 'coinSearch'])
!!}
<input type="text" placeholder="Search Your Coin Here . . . " name="search">
<button type="submit" class="btn btn-sm btn-primary">Search</button>
{!! Form::close() !!}
{!! $allCoins->render() !!}
分页仅适用于 GET 参数。您应该使用 GET 方法进行搜索和分页。
POST请求不是为了展示数据。为什么?原因很多。
我建议您将路由类型更改为 GET,将搜索表单方法更改为 GET。
对分页查询返回的结果对象调用appends方法。它接受一个数组作为参数,在数组中,你可以指定任意多的变量。
$results->appends ();
比如你的一个查询会变成
$resultByName = Coin::where('type','=','coin')
->where('parent_id','=',0)
->where('coin_name','LIKE',"%{$keyword}%")
->orderBy('id', 'asc')
->paginate(10);
$resultByName->appends (array ('keyword' => $keyword));
它将附加 link 中的所有变量,您的 URL 将变为
http://your_domain/search?keyword=$keyword(value of this variable)
分页将在不添加任何自定义代码的情况下工作。
好吧,显然不是我一个人解决了这个问题,但我所要做的就是像这样重新配置我的路线
Route::get('coin/search/{keyword?}', ['uses' => 'Coins@doSearch'])->name('coin.search');
Route::resource('coin' , 'Coins');