当前,我正在尝试实现搜索功能,但此刻遇到了一些障碍。
我希望它的工作方式是这样:
我已经弄清楚了如何根据子词检索图像的逻辑,但是,我还没有弄清楚如何将子词从搜索栏传递到search()函数,然后将我发送到搜索视图。我不确定是否需要第二条POST路由,可以在HTML表单表单操作中使用。
public function search($query){
$images = Image::where('name', 'like', '%'.$query.'%')
->orWhereHas('tags', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->orWhereHas('category', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->latest()->get();
return view('search', ['images' => $images]);
}
这是我到目前为止的路线:
Route::get('/search/{query}', 'PagesController@search')->name('searchView');
HTML表单:
<form action="" method='POST'>
<input type="text" placeholder="Search" name="search">
</form>
答案 0 :(得分:1)
最简单的方法是使用查询字符串。即:
表格:
<form action="{{route('searchView')}}">
<input type="text" placeholder="Search" name="search">
</form>
路线:
Route::get('/search', 'PagesController@search')->name('searchView');
方法:
public function search(Request $request)
{
$query = $request->search;
$images = Image::where('name', 'like', '%'.$query.'%')
->orWhereHas('tags', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->orWhereHas('category', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->latest()->get();
return view('search', ['images' => $images]);
}
路线看起来像
/search?search=queryhere
但是
如果您要将路线设为/search/query
之类的东西,则需要调用该路线。这不是html的正常行为。因此您需要使用一些js脚本发出请求。
<form id="myForm" onsubmit="event.preventDefault(); search();">
<input type="text" placeholder="Search" name="searchQuery" id="searchQuery">
</form>
<script type="text/javascript">
function search() {
var query = document.getElementById('searchQuery').value
window.location.href='/search/'+query
}
</script>
并保持您的路线和方法不变。