在 QueryBuilder 中使用 Where - Laravel
Use Where in QueryBuilder - Laravel
我有一个 table Products(id,category_id,name);
我想得到这样的查询结果:
SELECT * FROM Products WHERE category_id=$category_id OR $category_id=0;
当我为 $category_id 分配 0 值时 => 以上查询将 return 所有记录。
如何在 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
?
谢谢!
使用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
它,它会很有用。
使用它
Products::where(function($query) use ($category_id){
$query->where("category_id",$category_id)
->orWhere("category_id",0);
})->get();
你的代码有什么问题:
->orWhere($category_id,0)
您将列部分设为变量。
试试这个代码:
Products::where(function($query) use ($category_id){
return $query->where("category_id", $category_id)
->orWhere("category_id", 0);
})->get();
$product = new Products;
if ($category_id != 0) {
$product = $product->where("category_id", $category_id);
}
$products = $product->get();
我有一个 table Products(id,category_id,name);
我想得到这样的查询结果:
SELECT * FROM Products WHERE category_id=$category_id OR $category_id=0;
当我为 $category_id 分配 0 值时 => 以上查询将 return 所有记录。
如何在 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
?
谢谢!
使用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
它,它会很有用。
使用它
Products::where(function($query) use ($category_id){
$query->where("category_id",$category_id)
->orWhere("category_id",0);
})->get();
你的代码有什么问题:
->orWhere($category_id,0)
您将列部分设为变量。
试试这个代码:
Products::where(function($query) use ($category_id){
return $query->where("category_id", $category_id)
->orWhere("category_id", 0);
})->get();
$product = new Products;
if ($category_id != 0) {
$product = $product->where("category_id", $category_id);
}
$products = $product->get();