我想把这个查询变成一个大的
select * from brands inner join products on brands.id = products.brandid where categoryid = '1' and (productname like 'search' or brands.name = 'search')
我试过这个
$search = $request->allsearch;
$product = DB::table('brands')->join('products', 'brands.id', '=', 'products.brandid')
->where('categoryid', '=', 1)
->where(function ($product, $search) {
$product->where('productname','like','%'.$search.'%')
->orWhere('brands.name','like','%'.$search.'%');
});
但我弄错了Too few arguments to function AppHttpControllersProductController::AppHttpControllers{closure}(), 1 passed and exactly 2 expected
我已经尝试过使用when
,但没有成功。
知道吗?
在where回调函数中,您应该传递查询实例,对于其他参数,您可以在use((中传递它
$product = DB::table('brands')->join('products', 'brands.id', '=', 'products.brandid')
->where('categoryid', '=', 1)
->where(function ($query)use($search) {
if(!empty($search)){
$query->where('productname','like','%'.$search.'%')
->orWhere('brands.name','like','%'.$search.'%');
}
});
不要使用其他答案查询,因为它很可怕,有一种方法专门用于此。。。阅读文档。。。这是你能读到的最好的书之一。。。
$search = $request->allsearch;
$product = DB::table('brands')
->join('products', 'brands.id', '=', 'products.brandid')
->where('categoryid', 1)
->when(!empty($search), function ($query) use ($search) {
return $query->where(function ($product) use ($search) {
return $product->where('productname', 'like', "%$search%")
->orWhere('brands.name', 'like', "%$search%");
});
});
});
这是一种怪异的方式。。。并尽量避免100%使用DB::table(...)->join()
。。。Taylor和Laravel团队花时间为此创建了Relations
。。。不要丑化你的代码。。。