我有一个表格Products(id,category_id,name);
我想得到这样的查询结果:
SELECT * FROM Products WHERE category_id=$category_id OR $category_id=0;
当我为$ category_id赋值为0时=>以上查询将返回所有记录。
如何在Laravel中编写该查询?
我已经尝试过:
Products::where(function($query) use ($category_id){
$query->where("category_id",$category_id)
->orWhere($category_id,0)
})->get();
但是,错误:
它看起来像:
SELECT
*
FROM
`products`
WHERE
( `product_category_id` = 0 OR `0` = 0 )
并且打印错误:Column not found: 1054 Unknown column '0' in 'where clause'
如何解决:将'0' = 0
改成0 = 0
?
谢谢!
答案 0 :(得分:0)
使用when():
$products = Product::when($categoryId, function ($query, $categoryId) {
$query->whereCategoryId($categoryId);
})->get();
仅当条件为真时,此方法才调用函数。您可以使用简单的if
语句来实现相同的目的:
$products = Product::query();
if ($categoryId) {
$products->whereCategoryId($categoryId);
}
$products = $products->get();
使用when()
的好处是您不会打断链,因此可以在一个表达式中使用条件查询更改。例如,如果您只想return
,它会很有用。
答案 1 :(得分:0)
使用
Products::where(function($query) use ($category_id){
$query->where("category_id",$category_id)
->orWhere("category_id",0);
})->get();
答案 2 :(得分:0)
您的代码有什么问题:
->orWhere($category_id,0)
您将列部分设置为变量。
尝试此代码:
Products::where(function($query) use ($category_id){
return $query->where("category_id", $category_id)
->orWhere("category_id", 0);
})->get();
答案 3 :(得分:0)
$product = new Products;
if ($category_id != 0) {
$product = $product->where("category_id", $category_id);
}
$products = $product->get();