/ / Laravel Красноречив, Сортирай отношение, за да го направим дърво - laravel, красноречив, отношение, laravel-красноречив

Laravel Elloquent, Сортиране на отношението, за да го направи дърво - laravel, красноречиво, отношение, laravel-eloquent

Бих искал да генерирам Дърво въз основа на втория слой от красноречив отношение

Имам 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>