2017-08-10 4 views
0

Ich mache eine Bildergalerie. Bilder haben eine viel zu viele Beziehung mit Tags. Bilder haben auch eine viel zu viele Beziehung mit Kategorien.Laravel 5.4 Beziehungen Route Binding

$images = $category->images; 
$images = $tag->images; 

public function images(Category $category = null) 
{ 
    $images = $category->images; 

    return view('pages.images.index', compact('images')); 
} 

Routenmodell auf dieser Code-Bindung funktioniert gut und ich kann das gleiche für Tags tun, aber was ich suche zu tun Filter auf Kategorie und dann markieren.

$images = $tag->category->images; 

Zum Beispiel, wenn ich ein Bild mit dem Tag der „Hund“ und eine Kategorie „braun“ die Abfrage nur alle Hunde zurückkehren würde, wenn die braun sind.

Kann ich das tun? Beide Tags und Kategorien könnten mehrere Optionen haben, damit ich für eine Strecke wie diese Hoffnung, wurde ...

mysite.com/images/{category}/{tag}

Vielen Dank für jede Hilfe oder beste Richtung zu gehen .

Antwort

0

Sie könnten den Bau in der Laravel verwenden whereHas Funktionalität

Image::whereHas('categories', function ($query) use ($category) { 
    $query->where('NAME', '=', $category); 
})->whereHas('tags', function ($query) use ($tag) { 
    $query->where('NAME', '=', $tag); 
})->get(); 

den Namen mit dem gewünschten Feld, das Sie filtern möchten ersetzen.

+0

Dank! Diese Abfrage funktioniert großartig. Ich kann das "Tag" mit der Routenbindung mysite.com/images/{tag} und dann "category = brown" übergeben, um den Filter zu passieren. Weißt du einen Weg, wie ich das mit der Route so weitergeben kann? mysite.com/images/{tag}/{category} – briodev

0

Sie können die Route wie angegeben deklarieren und dann als Parameter in der Controller-Methode verwenden, die mit der Route verbunden ist.

Also, wenn Sie eine Route wie Route::get('/register/{token1}/{token2}','[email protected]'); erklären, dann ist es möglich, diese Platzhalter in der Methode bestätigen wie normale Parameter zu erhalten: public function confirm(Request $request, $token1, $token2) {}

+0

Funktioniert gut! Ich dachte, ich hätte das ohne Erfolg versucht. Möglicherweise in die Routenbindung eingreifen oder vielleicht, weil ich in den Parametern keine Request $ Anfrage hatte. Wie auch immer, danke und @MrChrissss für die Hilfe! Die Kombination der beiden Antworten hat mich dorthin gebracht. – briodev