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);
}