2017-05-27 107 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"; 
} 
相關問題