Бих искал да генерирам Дърво въз основа на втория слой от красноречив отношение
Имам 3 таблици, които са:
потребител (име, име)
пост (id, parent_id, име)
категория (USER_ID, POST_ID)
и имам примерна таблица като:
потребител
id | име
1 | Джон Доу
пост
id | parent_id | име
1 | 0 | Posta
2 | 1 | Пост A.1
3 | 4 | Пост Б.1
4 | 0 | Пост Б
категория
user_id | POST_ID
1 | 1
1 | 2
1 | 3
1 | 4
и въпросът ми е, как да сортирам публикацията от потребителя, за да получите дърво?
@foreach($user->categories as $category)
{{$category->post->name}}
@endfor
очаквам резултатът да бъде:
Posta
Пост A.1
Пост Б (не публикация Б.1)
Пост Б.1
Благодаря, наистина нямам идея да реша този проблем ..
Отговори:
0 за отговор № 1Едно от възможните интелигентни решения (сред всички други, например филтриране от база данни) може да бъде само сортирането на $user->categories
получена колекция. Красноречивите колекции имат метод за това:
@foreach($user->categories->sortBy("name") as $category)
Връзка към официални документи: https://laravel.com/docs/5.6/collections#method-sortby
Наздраве.
0 за отговор № 2
Вие сте кръстили вашата основна таблица нетрадиционно, но този код ще ви помогне. Първо се опитайте да добавите връзка на децата към вашата пост модел:
public function children()
{
return $this->hasMany(Post::class,"parent_id","id");
}
Този практически подход работи за n брой категории с n брой деца
Първо създайте частичен изглед category.blade.php
файл, който рекурсивно ще се обади, за да зареди своите деца
<li>
@if ($category->post->children()->count() > 0 )
<ul>
@foreach($category->post->->children as $category)
@include("category", $category) //the magic is in here
@endforeach
</ul>
@endif
</li>
След това в основния изглед добавяте този код, който зарежда всички деца рекурсивно
<ul>
@foreach ($user->categories as $category)
@if($category->post->parent_id == 0 )
@include("category", $category)
@endif
@endforeach
</ul>