2017-12-08 15 views
1

Ich kann alle Artikel für jede Kategorie mit diesem Code erhalten:Modell hasMany Beziehung mit wo Bedingung?

$category->article 

Jetzt möchte ich mit einem gewissen Zustand alle Artikel erhalten (in Artikel Tabelle)

ich diesen

$category->article->wherePublish(1)-> 
        whereFeature('top')->latest()-> 
        take(9)->get(); 

versuchen aber ich bekomme diesen Fehler:

Method wherePublish does not exist.

Antwort

1

$category->article führt die Abfrage aus und Sie erhalten eine Auflistung. Sammlungen haben keine wherePublish und ähnliche magische Methoden, deshalb erhalten Sie den Fehler.

Wenn Sie Artikel filtern möchten, verwenden Sie folgende Syntax:

Article::where('category_id', $category->id) 
    ->wherePublish(1) 
    ->whereFeature('top') 
    ->latest() 
    ->take(9) 
    ->get(); 

Dies wird für hasOne und hasMany Beziehungen arbeiten. Verwenden Sie für belongsToManywhereHas() Methode anstelle von where().

Alternativ können Sie eine separate Beziehung wie definieren:

public function filteredArticles() 
{ 
    return $this->hasMany(Article::class, 'article_id') 
     ->wherePublish(1) 
     ->whereFeature('top') 
     ->latest() 
     ->take(9); 
} 

Und es verwenden:

$category->filteredArticles 
Verwandte Themen