2017-04-02 55 views
0

我試圖讓一個動態的菜單,在菜單部分我想顯示的類別,如果類別有我想說的是,下的任何子目錄..調用未定義的方法stdClass的:: checkSubcategory()

我已閱讀下面的方法在我的分類模型

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

這裏是查看

@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 

但問題是當過我試圖加載視圖我看到下面的錯誤

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

可能是什麼原因error..any建議請。

回答

1

您正在使用的stdClass類型的對象,因此無法訪問您在控制器模型中定義的功能。可能的原因是您正在使用DB獲取您的類別。它爲您提供了一個數組類型的stdClass類型的對象。你需要的是Category類型的對象。因此,你應該使用分類模型

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

也得到您的類別,你將它定義爲一個靜態函數

public static function checkSubcategory($id) 

意味着你不能與對象調用它

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

刪除static來自函數定義的關鍵字。

此外,你可以重構你的功能。而不是通過它的身份證,只需與$this->id獲得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();  
} 

你甚至可以更深入地探索並使你的代碼更好地處理關係。

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 ? 
} 

你checkSubcategory會又變成

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

即使我已經刪除靜態keyword..I得到了同樣的錯誤.. 爲什麼多對多的關係?假設WordPress的博客子類別,生活方式與Html相同也有博客子類別,這樣的業務模板。 – User57

+0

告訴我你如何從控制器獲取你的類別。您在$ foreach中使用的$類別($ categories as $ row)' – EddyTheDove

+0

$ categories = Category :: all();就是這樣.. – User57

相關問題