2017-01-15 40 views
1

我很新與MySQL進行交互。我有一個我無法修改的數據庫(一個現有的系統),我必須獲得可用的類別及其子類。MySQL查詢得到類別和子女

如果我運行laravel的查詢生成器下面的查詢我得到的所有的類別和孩子是這樣的:

DB::table('tblknowledgebasecats')->get(); 

// Returns 

    Collection {#337 ▼ 
     #items: array:13 [▼ 
     0 => {#338 ▼ 
      +"id": 1 
      +"parentid": 0 
      +"name": "System" 
      +"description": "..." 
      +"hidden": "" 
      +"catid": 0 
      +"language": "" 
     } 
     1 => {#340 ▼ 
      +"id": 3 
      +"parentid": 0 
      +"name": "Help" 
      +"description": "Some Description" 
      +"hidden": "" 
      +"catid": 0 
      +"language": "" 
     } 
     2 => {#341 ▼ 
      +"id": 4 
      +"parentid": 0 
      +"name": "Troubleshooting" 
      +"description": "..." 
      +"hidden": "" 
      +"catid": 0 
      +"language": "" 
     } 
     3 => {#342 ▼ 
     +"id": 5 
     +"parentid": 1 
     +"name": "Installation" 
     +"description": "" 
     +"hidden": "" 
     +"catid": 0 
     +"language": "" 
     } 

正如你所看到的結果與5的ID爲1的parentid,怎麼辦我對此進行了查詢,以便將它們「鏈接」在一起?這是爲了建立一個菜單。輸出必須是這樣的視圖rendeing菜單:

- System 
    -- Istallation 
    -- ... 
- Help 
    -- .... 
-Troubleshooting 
- ... 

回答

1

我有一個使用遞歸查找子類別一個快速的解決方案,但它可能不是最好的在性能方面,因爲它確實火災多查詢

laravel的方法是創建一個Eloquent model而不是使用DB Facade。在模型類說應用程序\目錄添加以下內容:

public static function getChildren(App\Category $category) { 
return static::where('parentid', $category->id)->get(); 
} 

現在,在您的控制器功能顯示菜單,添加以下內容:

$parentcategories = App\Category::where('parentid', 0)->get(); 
return view('displaymenus', ['categories' => $parentcategories]); 

在您的主視圖中,添加以下內容:

<!-- View stored in resources/views/displaymenus.blade.php --> 
<ul> 
@foreach($categories as $category) 
<li> {{ $category->name }} @include('displaysubmenus', compact('category')) </li> 
@endforeach 
</ul> 

在你的子菜單中查看,添加以下內容:

<!-- View stored in resources/views/displaysubmenus.blade.php --> 
<ul> 
@foreach(App\Category::getChildren($category) as $subcategory) 
<li> {{ $subcategory->name }} @include('displaysubmenus', ['category' => $subcategory]) </li> 
@endforeach 
</ul> 
+0

感謝您的答案,這工作,現在會做得很好,有沒有其他方式可以從一個查詢中獲取數據庫結果? –