Laravel: Как отфильтровать коллекцию по нескольким фильтрам - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь отфильтровать коллекцию по нескольким фильтрам в массиве. Это то, что я делаю, но это не работает.

$collection->filter(function ($item) use ($filters) {

 foreach ($filters as $filter => $value){
    $buildedFilters = null;
    $buildedFilters .= $item->$filter == $value . "&&";
 }
 return $buildedFilters;
});

Способ, которым я хочу объединить фильтр, выглядит неправильно. Что может быть лучшим способом сделать это? Я не хочу этого прямо, красноречиво, чтобы оптимизировать количество вызовов БД (это часть кода в foreach)

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Вы пытаетесь объединить несколько атрибутов между собой. В PHP не пустая строка, эквивалентная true. Для достижения желаемого вам потребуется

$collection->filter(function ($item) use ($filters) {

 foreach ($filters as $filter => $value){
   if ($item->$filter != $value) {
      return false;
   }
 }
 return true;
});
1 голос
/ 28 февраля 2020

Метод filter должен вернуть boolean, попробуйте вместо этого:

$collection->filter(function ($item) use ($filters)
{
    $included = true;

    foreach ($filters as $filter => $value){
        $included = $included && ($item->$filter == $value);
    }

    return $included;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...