我有个问题。
我正在做一个搜索功能,用户将通过表单输入他们想要搜索的产品,然后返回产品。
这是表格。
<form action="{{ route('shopAll') }}">
<input type="text" name="search" placeholder="Search Products...">
<button type="submit"><i class="ti-search"></i></button>
</form>
产品php
class Product extends Model{
protected $fillable = [
'name','added_by', 'user_id', 'category_id', 'subcategory_id', 'subsubcategory_id', 'brand_id', 'video_provider', 'video_link', 'unit_price',
'purchase_price', 'unit', 'slug', 'colors', 'choice_options', 'variations', 'current_stock'
];
public function category(){
return $this->belongsTo(Category::class);
}
public function subcategory(){
return $this->belongsTo(SubCategory::class);
}
public function subsubcategory(){
return $this->belongsTo(SubSubCategory::class);
}
public function brand(){
return $this->belongsTo(Brand::class);
}
}
搜索控制器。php
if($request->search){
$data['products'] =
Product::where('name', 'LIKE', '%' . $request->search . '%')
->orWhere('tags', 'LIKE', '%' . $request->search . '%')
->orWhere('meta_title', 'LIKE', '%' . $request->search . '%')
->orWhere('slug', 'LIKE', '%' . $request->search . '%')
->get();
} else {
$data['products'] = Product::paginate(20);
}
return view('frontend.shop-all', $data);
我想让查询在类别、子类别、子类别和品牌上包括“或在哪里”,以便当用户想要搜索产品时,他们可以搜索品牌或与产品相关的任何属性。有人能帮我解决这个问题吗?
非常感谢你。
您可能想看看查询关系的whereHas/has方法。假设您希望搜索SearchController顶部关系(类别、子类别、子类别、品牌等)的name
属性。php,添加以下行:
use Illuminate\Database\Eloquent\Builder;
然后按如下方式更新查询:
$data['products'] =
Product::where('name', 'LIKE', '%' . $request->search . '%')
->orWhere('tags', 'LIKE', '%' . $request->search . '%')
->orWhere('meta_title', 'LIKE', '%' . $request->search . '%')
->orWhere('slug', 'LIKE', '%' . $request->search . '%')
->orWhereHas('category', function (Builder $query) use ($request) {
$query->where('name', 'like', '%' . $request->search . '%');
})
->orWhereHas('subcategory', function (Builder $query) use ($request) {
$query->where('name', 'like', '%' . $request->search . '%');
})
->orWhereHas('subsubcategory', function (Builder $query) use ($request) {
$query->where('name', 'like', '%' . $request->search . '%');
})
->orWhereHas('brand', function (Builder $query) use ($request) {
$query->where('name', 'like', '%' . $request->search . '%');
})
->get();