2014-11-18 4 views
0

Я использую Laravel и имею категории таблицу, созданную в моей базе данных MySql, которая имеет поле для использования обхода дерева навигации:Laravel 4 - поиск объекта из базы данных

id | parent_id | name | lft | rgt | depth 
1 |  NULL | test1 | 1 | 2 |  0 
2 |  NULL | test2 | 3 | 4 |  0 
3 |   1 | test3 | 5 | 6 |  1 

Я хочу, чтобы извлечь объекты, которые имеют depth = 0 (test1 и test2).

У меня есть эта функция в мой контроллер:

public function getIndex() { 
    $categories = array(); 

    foreach(Category::all() as $category) 
    { 
     $categories[$category->depth = '0'] = $category->name; 
    } 

    return View::make('categories.index') 
     ->with('categorieslist', $categories); 
} 

Но он всегда возвращает последний элемент (test2). Он должен вернуть все объекты с помощью depth = 0. Любые идеи?

ответ

2

Проблема заключается в том, что вы сохраняете (и перезапись) данные о положении $category->depth = '0' вашего массива $ категории

Не знакомы с Laravel, но это должно сделать трюк:

public function getIndex() { 
    $categories = array(); 

    foreach(Category::all() as $category) { 
     //If depth equals zero 
     if ($category->depth == 0) { 
      //append $category->name to $categories 
      $categories[] = $category->name; 
     } 
    } 

    return View::make('categories.index')->with('categorieslist', $categories); 
} 
+0

Спасибо, на самом деле, что сделал трюк! – cch

+0

@cchacholiades рад, что я могу помочь :) – daker

0

Eсть проблема в вашем цикле foreach. Вы выполняете итерацию по всем категориям и размещаете их на 0-й позиции. Я думаю, это должно сделать трюк:

public function getIndex() { 
    $categories = array(); 
    $all_parent_categories = Category::where('depth','=','0')->get(); 
    $i=0; 
    foreach(Category::all() as $category) 
     { 
      $categories[$i] = $category->name; 
      $i++; 
     } 
     return View::make('categories.index')->with('categorieslist', $categories); 
    } 
2

Вы можете получить категории, используя следующий код:

$categories = Category::where('depth', '=', 0)->select('name')->get()->toArray();