在 laravel 中创建条件查询
Create conditional query in laravel
我想把这个查询变成laravel方式
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 App\Http\Controllers\ProductController::App\Http\Controllers\{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.'%');
}
});
不要使用其他答案查询,因为它太可怕了,有一种专门用于此的方法...read the documentation...它是您可以阅读的最好的方法之一...
$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%");
});
});
});
这就是 laravel 方式...并尽量避免 100% 使用 DB::table(...)->join()
...Taylor 和 Laravel 团队花时间创建 Relations
为此...不要丑化您的代码...
我想把这个查询变成laravel方式
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 App\Http\Controllers\ProductController::App\Http\Controllers\{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.'%');
}
});
不要使用其他答案查询,因为它太可怕了,有一种专门用于此的方法...read the documentation...它是您可以阅读的最好的方法之一...
$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%");
});
});
});
这就是 laravel 方式...并尽量避免 100% 使用 DB::table(...)->join()
...Taylor 和 Laravel 团队花时间创建 Relations
为此...不要丑化您的代码...