Laravel查询获取错误的数据

时间:2018-08-02 14:48:50

标签: mysql laravel-5 eloquent

我写了Laravel搜索查询。

$product = Product::where('user_role_id', '=', 3)
                           ->where('user_id', '!=', $user_id)
                           ->where('quantity_in_stock', '>', 0);
                if (!empty($suggestion)) {
                    $product->where('product_name', 'like', '%' . $suggestion . '%')->orWhere('ndc_number', 'like', '%' . $suggestion . '%');
                }
                $search = $product->orderby('id', 'desc')->get();
                $products = $search->toArray();

但是我的问题是,当我查看搜索结果时,发现具有user_role_id => 2的结果,但是在查询中,我给出的结果等于3。

可以帮助您解决此问题。

谢谢

2 个答案:

答案 0 :(得分:1)

那是因为您的查询被转换为:

SELECT * 
FROM products
WHERE user_role_id = 1 
AND user_id != ? 
AND quantity_in_stick > 0 
AND product_name like %?% 
OR ndc_number like %?%

我想您要实现的是最后两个条件在一起,并且现在就这样,只要包括OR语句,它们就会影响整个结果集。您想要(product_name like %?% or ndc_number like %?%)

$product = Product::where('user_role_id', '=', 3)
                  ->where('user_id', '!=', $user_id)
                   ->where('quantity_in_stock', '>', 0);
if (!empty($suggestion)) {
    //You can re-assign the variable but I can't remember if you really need it or not, try it out 
    $product = $product->where(function($advancedWhere) use($suggestion) { 
        $advancedWhere->where('product_name', 'like', '%' . $suggestion . '%')
                      ->orWhere('ndc_number', 'like', '%' . $suggestion . '%');
    });
}
$search = $product->orderby('id', 'desc')->get();
$products = $search->toArray();

答案 1 :(得分:0)

在类似以下条件的地方添加更多内容后,分配变量:

if (!empty($suggestion)) {
    $product = $product->where('product_name', 'like', '%' . $suggestion . '%')->orWhere('ndc_number', 'like', '%' . $suggestion . '%');
}