Я создаю службу поиска, используя следующую запись в блоге: https://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598db
Это похоже на работу, за исключением того факта, что мои запросы возвращают каждую строку в таблице, а не конкретные.
Например, у меня есть такой фильтр:
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('items', function ($q) use ($value) {
$q->where('item_id', $value);
});
}
Это работает для отношений items
в моей модели. Кажется, что выполнение этого запроса обычно работает, но он не работает по отношению к коду в приведенном выше сообщении в блоге.
То же самое относится и к еще более простому запросу:
public static function apply(Builder $builder, $value)
{
return $builder->where('name', $value);
}
Когда я запускаю тест, он просто дает мне все элементы таблицы, а не те, которые соответствуют моему состоянию.
Мой поисковый код выглядит следующим образом, и я не вижу явных ошибок:
public static function search(Request $filters)
{
$query =
static::applyDecoratorsFromRequest(
$filters,
(new User)->newQuery()
);
return static::getResults($query);
}
private static function applyDecoratorsFromRequest(Request $request, Builder $query)
{
foreach ($request->all() as $filterName => $value) {
$decorator = static::createFilterDecorator($filterName);
if (static::isValidDecorator($decorator)) {
$query = $decorator::apply($query, $value);
}
}
return $query;
}
Любая помощь приветствуется!