@Beeshop87

Как отфильтровать коллекцию из объектов Illuminate\Support\Collection по массиву?

Приветствую! Есть задача над которой уже несколько дней бьюсь. Новичок в чужом коде разбирается...
Есть объект коллекции, содержащий массив объектов филиалов магазина. Нужно получить коллекцию объектов филиалов, у которых ID совпадает с ID из массива для сравнения.

Коллекция:
object(Illuminate\Support\Collection)#2149 (1) {
  ["items":protected]=>
  array(6) {
    [0]=>
    object(\Sale\Model\Store\Row)#2147 (4) {
      ["data":protected]=>
      array(18) {
        ["ID"]=>
        string(2) "96"
        ["ACTIVE"]=>
        string(1) "Y"
        ["ISSUING_CENTER"]=>
        string(1) "Y"
    }
    [1]=>
    object(\Sale\Model\Store\Row)#2148 (4) {
      ["data":protected]=>
      array(18) {
        ["ID"]=>
        string(3) "100"
        ["ACTIVE"]=>
        string(1) "Y"
        ["ISSUING_CENTER"]=>
        string(1) "Y"
    }
    [2]=>
    object(\Sale\Model\Store\Row)#2146 (4) {
      ["data":protected]=>
      array(18) {
        ["ID"]=>
        string(3) "124"
        ["ACTIVE"]=>
        string(1) "Y"
        ["ISSUING_CENTER"]=>
        string(1) "Y"
    }


Массив для сравнения $arPickupID:

array(2) {
    [0]=> "96"
    [1]=> "100"
  }


Мой код, который возвращает коллекцию только с первым совпадением

$shops - исходная коллекция
getStoreId() - метод объекта магазина, возвращающий ID

$filtered = $shops->filter(function($value) use($arPickupID)  {

                foreach ( $arPickupID as $item ) {
                    if ( $item == $value->getStoreId() ) {
                        return $value;
                    }
                }
            });


вот сам метод filter():

public function filter(callable $callback = null)
    {
        if ($callback) {
            return new static(Arr::where($this->items, $callback));
        }

        return new static(array_filter($this->items));
    }


Есть идеи, товарищи?
  • Вопрос задан
  • 318 просмотров
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы