2017-04-17 7 views
0

Ich habe ein Business und Services Modell in meiner Laravel-Anwendung. Ein Unternehmen kann viele Services haben (über eine Verknüpfungstabelle "business_services"). Ich versuche, eine Suchfunktion zu erstellen, die es mir ermöglicht, eine Reihe von Diensten zu übergeben, ich möchte über eloquent alle Unternehmen suchen, die diese Dienste bereitstellen.Eloquent WhereHas ALLE in Verbindung stehenden Aufzeichnungen

Ich habe bisher mit diesem kommen:

Business::all() 
->whereHas('services', function($q) use ($treatments_wanted) { 
    $q->where('service_id', $services_array); 
}) 

Das Problem mit diesem ist aber, dass es Unternehmen zeigen, dass zumindest einer der Dienste angeschlossen haben, ich will Unternehmen Liste, die alle Dienste haben aufgeführt in der $services_array.

Könnte jemand den effizientesten Weg erklären, dies zu tun?

Antwort

0

Ich denke, Sie müssen alle Ihre Dienste durchlaufen und whereHas() hinzufügen. Probieren Sie es aus:

$query = Business::all(); 

foreach ($services_array as $service) { 
    $query->whereHas('services', function($q) use ($service){ 
     $q->where('service_id', $service); 
    }); 
} 

$businesses = $query->get(); 
Verwandte Themen