2016-04-15 4 views
1

ich ein Tutorial mit diesem Quellcode Gefolgt: https://github.com/laracasts/Dedicated-Query-String-Filtering/tree/master/appLaravel 5 - Dedicated String-Abfrage-Filterung auf many-to-many-Beziehung

Wenn Sie laracasts haben Sie das Video ansehen können here

Was Ich mag zu Erzielen sind Filterprodukte basierend auf ihrer Kategorie.

Wenn ich selbst auf dem Produkt filtern, es funktioniert gut

class ProductFilter extends QueryFilter 

{ 
    public function categorie($name) 
    { 
     return $this->builder->where('name' , $name); 
    } 

} 

Aber wenn ich auf die Beziehung zu filtern versuchen doens't es Arbeit. (Ich bekomme auch keine Fehler). Der Fehler in dieser Datei befindet, denke ich

class ProductFilter extends QueryFilter 

{ 
    public function categorie($name) 
    { 
     return $this->builder->categories()->where('name' , $name); 
    } 

} 

Ansicht

<form method="get" action="/producten/categorie" style="display:inline-block"> 
@foreach($roots as $root) 
    <li><button type="submit" name="categorie" value="{{$root->name}}" class="button-link">{{$root->name}}</button></li> 
@endforeach 
</form> 

Strecke

Route::get('producten/categorie' , '[email protected]'); 

FrontProductController

public function index(ProductFilter $filters) 
    { 
     Product::filter($filters)->get(); 

    } 

Queryfilter Klasse

abstract class QueryFilter 
{ 
    protected $request; 
    protected $builder; 

    public function __construct(Request $request) 
    { 
     $this->request = $request; 
    } 

    public function apply(Builder $builder) 
    { 
     $this->builder = $builder; 

     foreach ($this->filters() as $name => $value) { 
      if (! method_exists($this, $name)) { 
       continue; 
      } 
      if (strlen($value)) { 
       $this->$name($value); 
      } else { 
       $this->$name(); 
      } 
     } 
     return $this->builder; 

    } 

    public function filters() 
    { 
     return $this->request->all(); 
    } 

} 

Produkt-Modell

public function categories() 
    { 
     return $this->belongsToMany('App\Category')->withTimestamps(); 
    } 

public function scopeFilter($query, QueryFilter $filters) 
    { 
     return $filters->apply($query); 
    } 

Antwort

1

Im Produktfilter ich brauche die folgenden für viele-zu-viele-Beziehungen zu tun:

public function category($name) 
    { 
     return $this->builder->whereHas('categories', function ($query) use ($name) { 
      $query->where('name', $name); 
     }); 
    }