2017-04-02 2 views
0

ich ein dynamisches Menü zu machen versuchte, wo in Menübereich Ich möchte eine Kategorie zeigen, und wenn die Kategorie hat jede Unterkategorie ich es unter ihm zeigen wollte ..Call to undefined Methode stdClass :: checkSubcategory()

ich habe die folgende Methode in meiner Kategorie Modell

public static function checkSubcategory($id){ 
     $category = Category::find($id); 
     $id = $category->id; 
     $subcategories = \DB::table ('subcategories') 
        ->join('categories_subcategories','subcategories.id','=','categories_subcategories.subcategory_id') 
        ->join('categories','categories_subcategories.category_id','=','categories.id') 
        ->where('categories.id','=',$id) 
        ->select('subcategories.name') 
        ->get();  
     return $subcategories; 
    } 

lesen Und hier ist die Ansicht

@foreach($categories as $row) 
       @if($row->checkSubcategory($row->id))  
       <li class="dropdown"> 
        <a href="#" class="dropdown-toggle"> 
         {{$row->name}} 
        </a> 
       <ul class="dropdown-menu"> 
        <li> 
        @foreach($row->checkSubcategory($row->id) as $sub) 
        <a href="{{asset('subcategories/product/'.$sub->name)}}">{{$sub->name}}</a> 
        @endforeach 
        </li>            
       </ul> 
       </li> 
        @else 
       <li class="pull-right"><a href="#">{{$row->name}}</a></li> 
        @endif  
       @endforeach 

Aber das Problem ist, wenn immer ich versuchte, den Blick i die folgenden Fehler anzeigen zu laden

ErrorException in efd7d9fe55aa0c18c60d0a857a8a44ed1725a390.php line 213: 
Call to undefined method stdClass::checkSubcategory() 

Was für den error..any Vorschlag Grund sein könnte bitte.

Antwort

1

Das Objekt, das Sie verwenden, hat den Typ stdClass und kann daher nicht auf die Funktion zugreifen, die Sie in Ihrem Steuerungsmodell definieren. Eine wahrscheinliche Ursache ist, dass Sie Ihre Kategorien mit DB erhalten. Sie erhalten ein Array mit Objekten vom Typ stdClass. Was Sie brauchen, sind Objekte vom Typ Category. Deshalb sollten Sie Ihre Kategorien mit der Kategorie Modell

//change 
$categories = DB::table('categories')->get(); 
//to 
$categories = Category::get(); 

auch erhalten, definiert Sie es als eine statische Funktion

public static function checkSubcategory($id) 

Bedeutet, dass Sie es nicht mit einem Objekt aufrufen kann

$row->checkSubcategory($row->id) 

entfernen static Schlüsselwort aus der Funktionsdefinition.

Darüber hinaus könnten Sie Ihre Funktion umgestalten. Anstatt es die ID zu übergeben, erhalten Sie einfach die ID mit $this->id.

public function checkSubcategory(){ 
    return \DB::table ('subcategories') 
       ->join('categories_subcategories','subcategories.id','=','categories_subcategories.subcategory_id') 
       ->join('categories','categories_subcategories.category_id','=','categories.id') 
       ->where('categories.id','=', $this->id) 
       ->select('subcategories.name') 
       ->get();  
} 

Sie könnten sogar tiefer tauchen und Ihren Code mit Beziehungen schöner machen.

public function subcategories() { 
    return $this->belongsToMany(SubCategory::class, 'categories_subcategories', 'category_id', 'subcategory_id'); 
    //Why do you have a many to many relationships between categories and subcategories ? 
} 

Ihre checkSubcategory würde dann wird

public function checkSucategory() { 
    return $this->subcategories()->count(); 
} 
+0

obwohl ich die statische keyword..I entfernen haben die gleiche Fehler .. warum viele zu viele Beziehung? Angenommen, Wordpress hat Blog-Subkategorie, Lifestyle wie Html hat auch Blog-Unterkategorie, Business-Vorlage wie das .. – User57

+0

Zeig mir, wie Sie Ihre Kategorien aus dem Controller bekommen. Die $ -Kategorien, die Sie in 'foreach ($ categories as $ row) verwenden ' – EddyTheDove

+0

$ categories = Category :: all(); das ist es .. – User57

Verwandte Themen