我正在使用Laravel Collections方法,并尝试通过id键入我的查询结果(这是一个集合)。问题是我有多个具有相同ID的条目,但指向不同的国家/地区,我希望拥有所有值,而不仅仅是最后一个。
这是我目前使用的代码:
$allCountries = new Collection($allCountries);
$offerCountries = $allCountries->keyBy('id');
dd($offerCountries);
foreach ($offer as $o) {
$o->countries = $allCountries->get($o->id);
}
为了解释,我的查询将结果放在$ allCountries中,其中包含ID和国家/地区,这些结果看起来像这样
id=>225, country=>US
id=>225, country=>IT
id=>3304, country=>NZ
只是为了给你一个快速的想法。我想通过导致$ offerCountries的id来键入这个。然后我循环通过之前的Collection,其中包含具有与id的国家/地区结果相关的特定ID的商品。因此,对于报价225,它包含的国家是美国和IT。我遍历每个商品,并将countries对象设置为等于所有$ allCountries id。我在这里遇到的问题是keyBy覆盖了值,只占用了最后一个。我希望得到这样的结果:
[
225 => countries: {'id' => 225, 'country' => 'US'}, {'id' =>
'225', 'country' => 'IT'}
3304 => ['id' => 3304, 'country' => 'NZ'],
]
是否有laravel方法来执行此操作,或者我是否需要编写自己的keyBy以便它不会覆盖。如果是这样,我该如何开始编写这个方法?
由于
答案 0 :(得分:9)
没有keyBy
但是groupBy
:
$countriesById = collect($allCountries)->groupBy('id');
答案 1 :(得分:0)
您可以使用过滤器并创建自定义过滤器
$filtered = $allCountries->filter(function ($item) use ($id) {
return $item->id == $id;
});
$filtered->all();