Laravel - grupowanie pobieranych danych

0

Cześć, mam proste drzewko kategorii.
|name|parent_id|
gdzie kategoria która ma parent_id jest kategorią podrzędną itd. Chciałbym teraz odpowiednio pogrupować zwracane rekordy tak aby wyświetlała się kategoria nadrzędna a pod nią podrzędne. Jak można to zrobić?

1

Nie wiem jakie masz modele ale jak zrobisz model kategorii

class Categories extends Model {
    public function parent() {
       return $this->hasOne('App\Category', 'parent_id','id');
    }

    public function childiren() {
       return $this->hasMany('App\Category', 'id','parent_id');
    }
}

to potem możesz dać w kontrolerze

public function example() {
    $data = Category::all();
    return view('index', compact('data'));
}

i na widok dajesz

<select>
    @foreach($data as $categories)
        <optgroup label="{{ $categories->name }}">
            @foreach($categories->children as $category)
                <option value="{{ $category->id }}">{{ $category->name }}</option>
            @endforeach
        </optgroup>
    @endforeach
</select>

znalazlem to kiedys na staxckoverflow i uzywalem u siebie

0

to zainstaluj to https://github.com/lazychaser/laravel-nestedset

bo tak to w modelu byś musiał dać

public function children() {
    return $this->hasMany(Categories::class, 'parent_id')->with('children');
}

Jakąś funkcję w helperze

function getCategoriesTree($categories) {
    foreach ($categories as $category) {
        echo '<li>' . $category->name . '</li>';
        if (count($category->children) > 0) {
            echo '<ul>';
                echo '<li>';
                    getCategoriesTree($category->children);
                echo '</li>';
            echo '</ul>';
        }
    }
}

w kontrolerze przesłać do widoku

$categories = Categories::where('parent_id', 0)->get();

a w widoku

<ul>
    getCategoriesTree($categories);
</ul>

to może o to ci chodzio

1 użytkowników online, w tym zalogowanych: 0, gości: 1