我正在尝试使用搜索字段的用户输入值来查询数据库。
但我得到的结果是完全错误的。它没有搜索词。
我不知道我在哪里做错了。我跟着l aravel doc
,有些问题超过了stackoverflow
,但是没有问题似乎有效。
任何人都可以检查我的查询,也许可以指导我找到正确的方向。
我的查询就像Query
字词Rose
一样,只有一条记录的标题名为Rose
public function catelogSearch(Request $request){
if ($request->has('query') && $request->get('query')!= ''){
$searchQuery = $request->get('query');
$query = ProductCategory::with(['product'=>function($q) use($searchQuery){
$q->where([
['product_type','both'],
['title','LIKE','%'.$searchQuery.'%'],
]);
if(request()->segment(1)=='shopping'){
$q->orWhere('product_type','shop');
}elseif (request()->segment(1)=='subscription'){
$q->orWhere('product_type','sub');
}
$q->whereHas('price',function ($q){
$q->where('quantity','>',0);
$q->where('status',1);
});
}])->with('product');
$data['result']=$query->paginate(30)->toArray();
print_r($data);
}
这个查询给了我数据库中的所有数据,不像它应该给我标题中的查询词。还请注意,我正在查询with('product')
两次。如果我做了一次,它没有返回产品数据,它会返回产品的空响应。
任何人都可以建议我。 谢谢你。
网址: localhost:8000/shopping/catalogsearch/result?query=rose
模型关系 的 ProductCategory.php
public function product()
{
return $this->belongsTo('App\Models\Product');
}
Product.php
public function price(){
return $this->hasMany('App\Models\ProductPrice');
}
product_category表
-----------------------------------------------
id | product_id| category_id | sub_category_id |
-----------------------------------------------
产品表
----------------------------
id | title | slug | product_type |
-----------------------------
产品价格表
----------------------------
id | product_id| price| quantity |
-----------------------------
答案 0 :(得分:0)
public function catelogSearch(Request $request){
if ($request->has('query')){
$searchQuery = $request->get('query');
$query = ProductCategory::product;
$query = $query->where('title', 'LIKE', '%'.$searchQuery.'%');
if(request()->segment(1)=='shopping'){
$query = $query->where('product_type','shop');
}elseif (request()->segment(1)=='subscription'){
$query = $query->where('product_type','sub');
}else{
$query = $query->whereIn('product_type',array('shop','sub'));
}
$query = $query->price->where('quantity','>',0)
->where('status',1)->get();
dd($query);
}
}
我已经删除了这些代码,稍后我会在获得上述代码的所需输出后添加它。所以请尝试让我知道输出。
if(request()->segment(1)=='shopping'){
$q->orWhere('product_type','shop');
}elseif (request()->segment(1)=='subscription'){
$q->orWhere('product_type','sub');
}