2017-04-16 1 views
0

Ich habe eine Beziehung zwischen Modellen: Post und Kategorie in Laravel-Anwendung. Ich habe diese Beziehungen wie folgt definiert:Abrufen von Daten durch andere Felder als ID in hat viele Beziehungen

public function category() { 
     return $this->belongsTo('artSite\category'); 
} 

public function posts() { 
     return $this->hasMany('artSite\post'); 
} 

Jetzt versuche ich Beiträge, die zu der bestimmten Kategorie abrufen, die in HTTP-Anforderung ableiten:

Route::get('posts/categories/{categoryName}','[email protected]') 

Im Folgenden werde ich meine Controller-Funktion zeigen (es tut Funktioniert gut!):

public function showPostGivenCategory($categoryName) { 

    $category = category::where('category_name','=',$categoryName)-first(); 
    $posts = category::find($category->id)->posts; 
    return view('pages.homePage')->with('categories',$categories)with('posts',$posts); 

} 

In dieser Lösung erstelle ich 2 Abfragen. Gibt es eine Möglichkeit, eine Abfrage zu erstellen, um Beiträge einer bestimmten Kategorie in vielen Relationen abzurufen?

So etwas funktioniert nicht:

$posts = category::where('category_name','=',$categoryName)->posts; 

mir jemand bei diesem Problem helfen könnte? Ich wäre sehr dankbar, Grüße.

+0

Warum nicht passieren Sie einfach die $ category-> id auf Antrag anstelle des Namens? Dann können Sie die ID direkt übergeben, ohne nach der tatsächlichen Kategorie zu suchen. Sie können auch findOrFail() verwenden, um sicherzustellen, dass Sie vorhandene Kategorien abrufen oder die Ausnahme behandeln. Oder Sie könnten auch findMany ([]) verwenden, mit dem Sie mehr als eine Kategorie gleichzeitig abrufen können. Aber zuerst würde ich versuchen, einfach die ID anstelle des Namens der Kategorie zu übergeben. Wie werden die Kategorien ausgewählt? – jsrosas

Antwort

0

wir loswerden der zweiten Zeile erhalten kann:

$posts = Category::find($category->id)->posts; 

So kann man sagen:

$posts = Category::where('category_name','=',$categoryName)->first()->posts; 
+1

Vielen Dank. Es funktioniert gut ;) –

Verwandte Themen