LaravelPackages.net
Acme Inc.
Toggle sidebar
paxha/laravel-recursive-relationships

This Laravel Eloquent extension provides recursive relationships using common table.

54.561
27
v1.1.0
About paxha/laravel-recursive-relationships

paxha/laravel-recursive-relationships is a Laravel package for this laravel eloquent extension provides recursive relationships using common table.. It currently has 27 GitHub stars and 54.561 downloads on Packagist (latest version v1.1.0). Install it with composer require paxha/laravel-recursive-relationships. Discover more Laravel packages by paxha or browse all Laravel packages to compare alternatives.

Last updated

Build Status StyleCI Total Downloads Latest Stable Version License

Introduction

This Laravel Eloquent extension provides recursive relationships using common table.

Installation

composer require paxha/laravel-recursive-relationships

Usage

Getting Started

Consider the following table schema for hierarchical data:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('parent_id')->nullable();
});

Use the HasRecursiveRelationships trait in your model to work with recursive relationships:

class User extends Model
{
    use \RecursiveRelationships\Traits\HasRecursiveRelationships;
}

By default, the trait expects a parent key named parent_id. You can customize it by overriding getParentKeyName():

class User extends Model
{
    use \RecursiveRelationships\Traits\HasRecursiveRelationships;

    public function getParentKeyName()
    {
        return 'user_id'; // or anything
    }
}

Relationships

The trait provides various relationships:

  • children(): The model's direct children.
  • nestedChildren(): The model's nested children.
  • parent(): The model's direct parent.
  • nestedParents(): The model's nested parents by object.
$users = User::with('children')->get();

$users = User::with('nestedChildren')->get();

$users = User::with('parent')->get();

$users = User::with('nestedParents')->get();

Scopes

The trait provides query scopes to filter models by their position in the tree:

  • hasChildren(): Models with children.
  • hasParent(): Models with a parent.
  • leaf(): Models without children.
  • root(): Models without a parent.
$noLeaves = User::hasChildren()->get();

$noRoots = User::hasParent()->get();

$leaves = User::leaf()->get();

$roots = User::root()->get();

Functions

The trait provides helper functions:

  • descendents(): The model's all Children in single array.
  • ancestors(): The model's all parents in single array.
  • siblings(): The parent's other children.
$descendents = User::find($id)->descendents();

$ancestors = User::find($id)->ancestors();

$siblings = User::find($id)->siblings();

License

This is open-sourced laravel library licensed under the MIT license.

Star History Chart