新しいコレクションにオブジェクトを追加する場合は、一連の異なる結果をループします。コレクションにオブジェクトが既に存在するかどうかを確認する - 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メソッドでサポートされていないようです。
if (!$servicesImpacted->contains('name', $service->name))
それとも、例えば、この場合にはwhere()
とcount()
コレクションのメソッドを使用できます:
toString() must not throw an exception
定義したモデルとリレーションシップを提供できますか? Item :: where(...) - > with( 'services');あなたは次のように書くことができます。 – YanDatsyuk
したがって、 '$ servicesImpacted'はオブジェクトの集合です。右? –