所以基本上我正在做一个大学项目,而我项目中唯一缺少的是一个有效的搜索表单,但是我不知道该怎么做。我所有的产品都被创建并植入了数据库。
我的路线:
Route::get('/', [
'uses' => 'ProductsController@getIndex',
'as'=> 'product.index'
] //tenho de meter um . porque nao é uma diretoria global, index ta dentro
duma pasta shop
);
我的桌子:
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string("imagePath");
$table->string("title");
$table->text("description");
$table->integer("price");
});
我的表单结构:
<form action="" method="post" class="navbar-form navbar-left " role = "search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
我的产品负责人:
public function getIndex(){
$products = Products::all();
return view('shop.index', ['products' => $products]);
}
我看过很多关于如何做一个的教程,但是我似乎无法使其过滤掉我所拥有的,例如,如果我在商店里有3个靴子和5个鞋子,如果我写“ boot”在搜索中,我只希望3个靴子出现
答案 0 :(得分:0)
有很多不同的方法来进行类似的搜索...从简单到非常复杂,但是一种基本的方法是在标题和说明字段中搜索诸如“ boot”之类的关键字。
您需要添加几件事... 首先,添加一条新路径来处理搜索请求:
Route::post('/results', [
'uses' => 'ProductsController@searchProducts',
'as'=>'product.search'
]);
接下来,在您的html输入中添加一个名称,例如'keyword'以及CSRF令牌字段的刀片快捷方式:
<form action="/results" method="post" class="navbar-form navbar-left " role = "search">
@csrf
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" name="keyword">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
然后向您的控制器添加一个函数来处理查询:
public function searchProducts(Request $request){
$results = Product::where('title', 'like', '%'.$request->search.'%')
->orWhere('description', 'like', '%'.$request->search.'%')
->orderBy('title', 'desc')
->get();
return view('search_results', ['results'=>$results, 'keyword'=>$request->keyword]);
}
最后,创建一个名为search_results.blade.php的新文件,并将其放在您的views目录中。这将用于向用户显示搜索结果。
<h2>Search Results for {{$keyword}}</h4>
<table>
<thead>
<tr>
<th>Product</th>
<th>Description</th>
<th>Price</td>
</tr>
</thead>
<tbody>
@forelse($results as $result)
<tr>
<td>{{$result->title}}</td>
<td>{{$result->description}}</td>
<td>{{$result->price}}</td>
</tr>
@empty
<tr>
<td colspan="3">
No Products Found
</td>
</tr>
@endforelse
</tbody>
</table>
有了这个基础,您真的可以疯狂并添加过滤选项,排序,排名等。希望对您有所帮助!
答案 1 :(得分:0)
您的HTML将是
<form action="{{ route('product.search') }}" method="post" class="navbar-form navbar-left " role = "search">
@csrf
<div class="form-group">
<input type="text" class="form-control" name="search" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
在您的searchProduct
函数中
对于类似的查询,它可以在标题中进行搜索,并且如果存在关键字,它将返回与您要搜索的标题相同的所有产品
public function searchProducts(Request $request){
$products = Product::where('title', 'like', '%'.$request->search.'%')->get();
return view('shop.index', ['products' => $products]);
}
获得完全相同的标题结果
public function searchProducts(Request $request){
$products = Product::where('title',$request->search)->get();
return view('shop.index', ['products' => $products]);
}
答案 2 :(得分:-1)
你可以做到
html
<form action="/search" method='post' class="navbar-form navbar-left " role = "search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" name="search">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
PHP
public function search(Request $request)
{
$products = Product::where('title', 'LIKE', '%'.request->search.'%')->get();
return view('search', ['products' => $products]);
}
仅更改要返回的视图,也可以将其创建到route / web.php中。