Skip to content
Advertisement

Call to undefined method AppAnnonce::categories()

i want to filter annonces according to their category, but it gives me error Call to undefined method App Listing :: categories ().

AnnoncesController.php

public function index()
    {
        if (request()->category) {
         $annonces = Annonce::with('categories')->whereHas('categories', function ($query){
          $query->where('slug',request()->category);
         });
            $categories     = Category::all();
        }else{
            $categories     = Category::all();
            $annonces       = Annonce::paginate(4); 
        }
        
        return view('annonces.index')->with([
            'categories'     => $categories,
            'annonces'       => $annonces
        ]);
    }

index.blade.php

<div class="row">
                            <div class="col-md-12 gallery-filter">
                                <div class="button-panel">
                                    <button data-filter="all" class="btn btn-primary ">All</button>
                                    @foreach($categories as $category)
                                    <a href="{{ route('annonces.index',['category'=>$category->slug]) }}" data-filter=".{{ $category->slug }}" class="btn btn-primary ">{{ $category->name }}</a>
                                    @endforeach
                                </div>
                            </div>
                        </div>

Annonce.php

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

Category.php

protected $table = 'category';

    public function annonces(){
        return $this->hasMany('AppAnnonce');
    }

Advertisement

Answer

as per your code you need to change this categories to category because in Annonce.php you created category relationship

 public function index()
    {
        if (request()->category) {
            $annonces = Annonce::with('category')->whereHas('category', function ($query) {
                $query->where('slug', request()->category);
            });
            $categories     = Category::all();
        } else {
            $categories     = Category::all();
            $annonces       = Annonce::paginate(4);
        }

        return view('annonces.index')->with([
            'categories'     => $categories,
            'annonces'       => $annonces
        ]);
    }
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement