检查对象是否已经存在于集合中 - Laravel

2022-08-30 12:48:16

我希望在循环浏览一系列不同的结果时将对象添加到新集合中。

查询:

$osRed = Item::where('category', 'Hardware')
        ->where(function ($query) {
            $query->where('operating_system', 'xxx')
                ->orWhere('operating_system', 'xxx')
                ->orWhere('operating_system', 'xxx');
        })
        ->orderBy('operating_system', 'ASC')
        ->get();

然后,遍历这些结果并将相关对象添加到新集合。

foreach ($osRed as $os) {
        foreach ($os->services as $service) {
            if (!($servicesImpacted->contains($service))) {
                $servicesImpacted->push($service);
            }
        }
}

然后,我继续查看另一组结果,并将这些结果中的相关服务添加到集合中。

但是,它不会发现该对象已经在集合中,我最终会得到大量(似乎是)重复项。

理想情况下,我想匹配$service对象的 name 属性,但 contains 方法似乎不支持这一点。

toString() must not throw an exception

答案 1

您可以使用定义了键和值的 contains():

if (!$servicesImpacted->contains('name', $service->name))

或者,在这种情况下,您可以使用 where()count() 收集方法,例如:

if ($servicesImpacted->where('name', $service->name)->count() === 0)

答案 2

您可以在 Laravel 中使用 contains() 方法检查某些特定的值键是否存在。如果特定键的集合中值可用,则返回 true。

if($collection->contains('product_id',1234))
{
  echo "product id 1234 available in collection";
}

推荐