2017-05-27 9 views
2

Suche Objekte in eine neue Sammlung, wie ich Schleife durch eine Reihe von unterschiedlichen Ergebnissen hinzuzufügen.Überprüfen Sie, ob Objekt existiert bereits in Collection - Laravel

Die Abfrage:

$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(); 

Dann Schleife durch diese Ergebnisse und entsprechende Objekte in eine neue Sammlung.

Ich gehe dann zu einer anderen Reihe von Ergebnissen und füge die zugehörigen Dienste aus diesen Ergebnissen zur Sammlung hinzu.

Es ist jedoch nicht Abholung, dass das Objekt bereits in der Sammlung ist und ich am Ende mit einer großen Anzahl von (was zu sein scheint) Duplikate.

Im Idealfall würde Ich mag auf dem Attribut name des $ Dienstobjekt übereinstimmen, aber das scheint nicht unterstützt zu werden durch das Verfahren enthält.

toString() must not throw an exception 
+0

Können Sie Ihre Modelle und Beziehungen angeben, was Sie definiert haben? Es scheint, dass Sie so etwas schreiben können: Item :: where (...) -> with ('services'); – YanDatsyuk

+0

Also '$ servicesImpacted' ist eine Sammlung von Objekten. Recht? –

Antwort

5

können Sie verwenden contains() mit Schlüssel und Wert definiert:

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

Oder Sie könnten where() und count() Erhebungsmethoden in diesem Fall zum Beispiel verwenden:

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

Danke @Alexey Wurde immer noch zu String-Fehler mit dem 'count() Ansatz. Sie haben mir jedoch geholfen, das Problem mit der Methode contains zu beheben, und es funktioniert jetzt ein Leckerbissen :) – kerrin

0

Sie verwenden die Methode contains() in Laravel für Überprüfen Sie, ob ein bestimmter Wertschlüssel existiert oder nicht. Wenn der Wert in der Sammlung für den spezifischen Schlüssel verfügbar ist, wird True zurückgegeben.

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