在QueryBuilder中使用位置-Laravel

时间:2018-12-05 03:26:51

标签: laravel eloquent laravel-query-builder

我有一个表格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

谢谢!

4 个答案:

答案 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();