Сортировать коллекцию Eloquent по ее родительскому элементу

это моя таблица тегов:

id      name        parent
--------------------------
1      parent1      null
2      a            parent1
3      b            parent1
4      parent2      null
5      c            parent2
6      d            parent1
7      parent3      null
8      e            parent3
9      f            parent2

Как я могу получить коллекцию, в которой каждый тег помещен под свой родительский тег? я имею в виду:

Collection {#499 ▼
  #items: array:22 [▼
    0 => tag {#524 ▶} //parent1
    1 => tag {#525 ▶} //a
    2 => tag {#526 ▶} //b
    3 => tag {#527 ▶} //d
    4 => tag {#528 ▶} //parent2
    5 => tag {#529 ▶} //c
    6 => tag {#530 ▶} //f
    7 => tag {#530 ▶} //parent3
    8 => tag {#530 ▶} //e
  ]
}

Благодарю.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
507
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Учитывая модель Item по отношению к самой себе:

class Item extends model {
    public function children() {
         // parent being a foreign key
         return $this->hasMany(__CLASS__, 'parent', 'id');
    }
}

$items = Item::with('children')->get();

Для этого вам нужно создать собственный класс коллекции вот пример кода:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Collection;

/**
 * Class CommentCollection
 * @package App
 */
class CommentCollection extends Collection {

    /**
     * @return Collection
     */
    public function threaded()
    {
        $comments = parent::groupBy('parent_id');

        if (count($comments))
        {
            $comments['root'] = $comments[0];
            unset($comments[0]);
        }

        return $comments;
    }
}

он будет отсортировать коллекцию комментариев во вложенной форме, как вы упомянули У меня есть метод в модели комментариев:

/**
 * Use a custom collection for all comments.
 *
 * @param  array $models
 *
 * @return CommentCollection
 */
public function newCollection(array $models = [])
{
    return new CommentCollection($models);
}

также у меня есть этот метод для модели Post:

/**
 * @return mixed
 */
public function getThreadedComments()
{
    return $this->comments()->with('owner')->where('verified', '=', TRUE)->get()->threaded();
}

Попробуй это:

class Example extends model {
    public function children() {
         return $this->hasMany( __CLASS__ , 'parent', 'id');
                }
            }
$data = Example::with('children')->latest();

Другие вопросы по теме