Nano Hash - криптовалюты, майнинг, программирование

Laravel получает все дочерние отношения с родителями

в нашем приложении, которое использовало laravel, мы внедрили родительско-дочернюю структуру с отношениями базы данных. Например:

все идентификаторы являются образцами в этой структуре:

programmings (NULL):
    web programmings (1)
       backend (2)
           laravel (3)
       api )4)
           lumen (5)
       python (6)
    desktop (7)
       java (8)

каждый родитель в нашей базе данных начинается и указывает на null, и у каждого дочернего элемента есть родительский идентификатор. теперь, когда мы пытаемся получить всех родителей laravel, мы должны иметь:

backend - web programmings - programmings 

Category структура модели:

/**
 * Get the parent Category to which the current Category belongs.
 */
public function parent(): BelongsTo
{
    return $this->belongsTo(Category::class, 'parent_id', 'id', 'parent');
}

/**
 * Get all Categories which belong to the current Category.
 */
public function subcategories(): HasMany
{
    return $this->hasMany(Category::class, 'parent_id', 'id');
}

я получаю один уровень дочернего родителя, но я не знаю, как я могу получить всех родителей дочернего элемента, пока они не прибыли в null

получение всех сообщений в зависимости от роли:

контроллер:

$categories = auth()->user()->availableCategories();

HasPosts черта:

trait HasCategories
{
    public function availableCategories(): Collection
    {
        $categories = $this->categories;

        $parents = $categories->filter(function ($cat) use ($categories) {
            return !in_array($cat->parent_id, $categories->pluck('id')->all()) || is_null($cat->parent_id);
        });

        $parents->map(
            fn ($parent) => $this->setNested($parent, $categories)
        );

        return $parents;
    }

    /**
     * Get all Categories with Posts associated with the User in nested tree structure.
     */
    public function availableCategoriesWithPosts(): Collection
    {
        $categories = $this->categories()->withPosts()->get();

        $parents = $categories->filter(
            fn ($cat) =>
            !$categories->contains('id', $cat->parent_id) || is_null($cat->parent_id)
        );

        $parents->map(fn ($parent) => $this->setNested($parent, $categories));

        return $parents;
    }
        
           
    protected function setNested($parent, $categories)
    {
        $parent->setRelation('subcategories', $categories->where('parent_id', $parent->id));
        $parent->subcategories->map(function ($sub) use ($categories) {
            if ($categories->contains('parent_id', $sub->id)) {
                $this->setNested($sub, $categories);
                return $sub;
            }
        });
    }
}

я пробую этот код:

public function parent(): BelongsTo
{
    return $this->belongsTo(Category::class, 'parent_id', 'id', 'parent')->with('parent');
}
15.01.2021

  • Опубликуйте свой код контроллера, который вы пробовали 15.01.2021
  • Отвечает ли это на ваш вопрос? Рекурсивные отношения Laravel 15.01.2021
  • @sta я обновил пост 15.01.2021
  • @JulioVásconez, ваша ссылка, вставленная сюда, получает все дочерние элементы родителя. я хочу, чтобы все родители ребенка 15.01.2021
  • Логика по-прежнему похожа, но это обратно-рекурсивная связь, работающая до тех пор, пока один из current.parent не станет null, в отличие от рекурсивной связи, где вы останавливаетесь, когда число current.children равно 0. 15.01.2021
  • @sta мне очень жаль, я вставил правильный код, я обновил сообщение 15.01.2021
  • Родительский столбец parent_id @TimLewis имеет NULL, и если я могу получить три уровня, это нормально 15.01.2021

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..