harp-orm/materialized-path

Materialized path nesting for Harp ORM models

0.3.1 2014-07-17 15:50 UTC

This package is auto-updated.

Last update: 2024-03-21 19:40:07 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version

Materialized path nesting for Harp ORM models.

What is Materialized path? Here's a great explanation: http://bojanz.wordpress.com/2014/04/25/storing-hierarchical-data-materialized-path/ This package does not implement the most advanced implementation, but it works quite well as is.

Usage

Add the Trait to your Model

use Harp\Harp\AbstractModel;
use Harp\MP\MaterializedPathTrait;

class Category extends AbstractModel
{
    public static function initialize($config)
    {
        MaterializedPathTrait::initialize($config);

        // Other initializations
        // ...
    }
}

Database Table:

┌─────────────────────────┐
│ Table: Category         │
├─────────────┬───────────┤
│ id          │ ingeter   │
│ name        │ string    │
│ parentId*   │ integer   │
│ path*       │ string    │
└─────────────┴───────────┘
* Required fields

Methods

It will add "parent" and "children" Rels to the repo. The model will get the convenience methods:

Method Description
getParent() Return the immidiate parent model
setParent(AbstractModel $parent) Set the immidiate parent model, after save the changes are propogated to all the children
getChildren() Get immidiate children. Returns a Models object
isRoot() Boolean check if it is root (has parent) or not
getDescendants() Returns all the children and the children's children. Models object
getAnsestors() Return all the parents, including root. Models object
isDescendantOf(AbstractModel $parent) Chech if a model is descendant
isAnsestorOf(AbstractModel $parent) Chech if model is ansestor

License

Copyright (c) 2014, Clippings Ltd. Developed by Ivan Kerin

Under BSD-3-Clause license, read LICENSE file.