2017-05-27 238 views
2

我正在寻找添加对象到新的集合,因为我循环通过一系列不同的结果。检查对象是否已经存在集合 - Laravel

查询:

$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 
+0

你能否提供你的模型和关系你定义了什么?看来,你可以写这样的东西:Item :: where(...) - > with('services'); – YanDatsyuk

+0

所以'$ servicesImpacted'是对象的集合。对? –

回答

5

您可以使用contains()密钥和值定义:

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

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

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

谢谢@Alexey使用count()方法仍然会出现toString错误。但是,您帮助我解决了包含方法的问题,它现在正在处理一项待遇:) – kerrin

0

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

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