簡體   English   中英

在子集合中過濾 laravel 集合

[英]Filter laravel collection in sub collection

我的收藏是這樣的。

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_angg->code的值過濾 model 。 所以我嘗試這樣。 過濾並 foreach list_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_angg->code具有給定值的所有元素,您可以使用filter()contains()的組合。

$filterCollection->filter(function ($value) use ($code) {
  return $value->list_angg->contains('code', $code);
});
  • filter()返回集合中所有返回真值的值。

  • 如果集合包含與提供的條件匹配的值(可以是閉包、值或鍵和值),則contains()返回truefalse

請記住contains()使用“松散”比較,因此如果您需要嚴格匹配,可以使用containsStrict

您的代碼未正確過濾,因為在過濾器閉包中您始終返回 model 實例,該實例根據第一個元素評估為truefalse ,因此基於此將其視為通過或失敗。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM