Laravel Query Fetch Wrong Data

0

Я написал Laravel Search Query.

$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.

Может ли какая-нибудь помощь решить эту проблему.

Спасибо

Теги:
eloquent
laravel-5

2 ответа

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();
  • 0
    Спасибо, абр. это работает. Просто вам нужно использовать ($ Suggestion) тоже в вашей функции закрытия. Благодарю.
0

Назначьте переменную после добавления большего количества условий, например:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню