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);
});