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ć?
0
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