Использовать несколько фильтров в Laravel - PullRequest
3 голосов
/ 03 августа 2020

Я отчаянно ищу способ сделать несколько фильтров на своей доске. В настоящее время я использую функцию filter () для фильтрации некоторых элементов моего массива. Мне нужно было бы отобразить элементы нескольких массивов с одним и тем же ключом, но я не могу этого сделать.

Мой контроллер:

$arrays = $arrays->filter(function ($item) use ($five, $four, $three, $two){
                return data_get($item, 'note') == $five;
            });

Мне нужно будет отобразить массивы, содержащие заметку ключи с $five $four $three и $two. Можно ли использовать несколько data_get в одной функции?

Ответы [ 2 ]

4 голосов
/ 03 августа 2020

То, что вы ищете, не обязательно является filter(), а groupBy() функцией.

https://laravel.com/docs/7.x/collections#method -groupby

Если вы пытаетесь сгруппировать по значению свойства, тогда все, что вам может понадобиться, это

$arrays->groupBy('note');

Если вы пытаетесь сгруппировать по чему-то более сложному, вы можете использовать обратный вызов (аналогично вашему фильтру)

$arrays->groupBy(function ($item) use ($five, $four, $three, $two) {
    // return the value you wish to group by
    switch ($item->note) {
        case $five:
           return 'five';
        ...
    }
});
2 голосов
/ 03 августа 2020

Если вы хотите фильтровать по массиву $values, тогда вы можете подумать о том, чтобы сделать что-то вроде этого:

$values = collect([$five, $four, $three, $two]);

$arrays->filter(function ($value) use ($values) {
   return $values->has($value);
});

Если вы проверяете значение пары ключ -> значение , используйте метод contains() https://laravel.com/docs/7.x/collections#method -contains

Если вы проверяете ключ пары ключ -> значение, используйте метод has() https://laravel.com/docs/7.x/collections#method - имеет

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