Php 在子集合中筛选laravel集合

Php 在子集合中筛选laravel集合,php,laravel,laravel-5,Php,Laravel,Laravel 5,我的收藏是这样的 Collection { 0 => Name_Model { "id" => 44 "name" => "The name of " "list_angg" => Collection { 0 => Name_Model_sub { "code&qu

我的收藏是这样的

Collection {
    0 => Name_Model {
        "id" => 44
        "name" => "The name of "
        "list_angg" => Collection {
            0 => Name_Model_sub {
                "code" => "02"
                "nameofcode" => "The name of 02"
            }
            1 => Name_Model_sub {
                "code" => "01"
                "nameofcode" => "The name of 01"
            }
        }
    }
    1 => Name_Model {
        "id" => 45
        "name" => "The name of thus"
        "list_angg" => Collection {
            0 => Name_Model_sub {
                "code" => "03"
                "nameofcode" => "The name of 3"
            }
        }
    }
}
我想按
list\u angg->code
的值过滤该模型。所以我试着这样做。筛选并获取
列表\u angg->code

$jurnals = $filterCollection->filter(function($value, $key) use ($kode_fakultas){
    foreach ($value->list_angg as $lists) {
        $filtered = $lists->where('code', $kode_fakultas);
        return $filtered;
    }
    return $filtered;
});
dd($jurnals);
我尝试使用方法
reject()
map()

但过滤器并没有起到很好的作用。我错过了什么吗?

您可以先根据自己的要求重新组织收藏。例如:

public function formatCollection($collection)
 {
  $results = [];
     foreach ($collection as $item)
     {
         $results[] = [
             'foe' => $item['bar'],
             'baz' => $item['foo']
         ];
     }

    return collect($results);
 }
这将返回所需的json格式,然后您可以对其应用过滤器。例如:

$result=formatCollection($collection)

这将返回您可以应用的集合

$result->filter(function(value){
  return (value === 'foo');
}

这将返回您收藏中所需的信息或型号。

希望我正确理解了这个问题

要过滤所有
list\u angg->code
具有给定值的元素,可以使用
filter()
contains()
的组合

  • filter()
    返回集合中返回真实值的所有值

  • contains()
    如果集合包含与提供的条件匹配的值,则返回
    true
    false
    ,该值可以是闭包、值或键和值

请记住
contains()
使用“松散”比较,因此如果需要严格匹配,可以使用
containsStrict

您的代码没有正确过滤,因为在过滤器闭包中,您总是返回模型实例,该实例根据第一个元素计算为
true
false
,因此根据第一个元素它被视为通过或失败

参考资料:

$filterCollection->filter(function ($value) use ($code) {
  return $value->list_angg->contains('code', $code);
});