2016-05-30 6 views
1

Ich bin, versuche, so etwas zu tun:So fügen Sie dynamische ‚wo‘ zu eloquent ORM mit() Beziehung

$verfuegbarkeiten = Verfuegbarkeit::verfuegbar()->with('product', 'producer', 'producer.user', 'producer.user.ort')->where('product.kategorie_id', '=', $_GET['kat'])->get()->toArray(); 

Ich möchte ich nur das bekommen kann so ein ‚wo‘ Klausel verwenden, Ergebnisse, bei denen das 'Produktattribut' kategorie_id 'mit dem GET-Parameter übereinstimmt. Wie kann ich auf einer Beziehung "wo" sein? Es ist wirklich wichtig für mich, dass dieser Wert dynamisch sein kann, daher ist das Schreiben einer Fix-Funktion im zugehörigen Modell keine gute Lösung.

Jeder Hinweis geschätzt

Antwort

2

Sie wollen whereHas(), Dokumentation hier: https://laravel.com/docs/5.2/eloquent-relationships#querying-relations

Für Ihr Beispiel, dass so etwas wie dies bedeuten würde:

$kat = $_GET['kat']; 
$verfuegbarkeiten = Verfuegbarkeit::verfuegbar() 
    ->with('product', 'producer', 'producer.user', 'producer.user.ort') 
    ->whereHas('product', function($query) use ($kat) { 
     $query->where('kat', $kat); 
    }) 
    ->get() 
    ->toArray(); 

Obwohl ich hinzufügen möchte, dass $_GET Verwendung ist in der Regel entmutigt in Laravel.

+0

Leider wird dies nicht funktionieren, weil 'whereHas' Constraint nur für bestimmte Beziehungssammlung funktioniert - nicht für Haupttabelle - so wird es Daten nicht herausfiltern. –

+1

Es tut mir leid @ FilipKoblański, ich verstehe nicht ganz, was du meinst. Dies wird alle Verfuegbarkeitsobjekte bekommen, die ein Produkt haben, das zu? Kat = passt, was genau das zu sein scheint, was er will. –

Verwandte Themen