Laravel 10 игнорирует "->where"
Дано:
$items = Item::query()
->where('item_docs_id', '=', $itemDoc)
->when(RequestFacade::input('search'), function($query, $search) {
$query->where('article', 'like', '%' . $search . '%')
->orWhere('name_ru', 'like', '%' . $search . '%');
Т.е. есть модель, из которой мы берём данные для странички выборки документа, т.е. связь:
->where('item_docs_id', '=', $itemDoc)
Если производить поиск, пример по article:
->where('article', 'like', '%' . $search . '%')
Ищет по этому документу, без проблем. Но если:
->orWhere('name_ru', 'like', '%' . $search . '%');
то игнорирует:
->where('item_docs_id', '=', $itemDoc)
Вопрос, почему он игнорирует? Спасибо!
Ответы (2 шт):
Автор решения: lezhni
→ Ссылка
Попробуйте так, скорее всего неправильно группируются условия в конечном запросе (WHERE condition AND condition2 OR condition3 вместо WHERE condition AND (condition2 OR condition3))
$items = Item::query()
->where('item_docs_id', '=', $itemDoc)
->when(RequestFacade::input('search'), function ($query, $search) {
$query->where(function ($q) use ($search) {
$q
->where('article', 'like', '%'.$search.'%')
->orWhere('name_ru', 'like', '%'.$search.'%');
});
});
Автор решения: Igor
→ Ссылка
Помог такой запрос, но он большой, может есть что то элегантнее:
$items = Item::query()
->where('item_docs_id', '=', $itemDoc)
->when(RequestFacade::input('search'), function($query, $search) {
$query->where('article', 'like', '%' . $search . '%');
})
->orWhere('item_docs_id', '=', $itemDoc)
->when(RequestFacade::input('search'), function($query, $search) {
$query->where('name_ru', 'like', '%' . $search . '%');
})
->select('id', 'item_docs_id','article', 'brand', 'name_ru', 'name_en', 'purchase_price_original', 'amount', 'file_place')
->paginate(10)->withQueryString();