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.
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
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 |
Copyright (c) 2014, Clippings Ltd. Developed by Ivan Kerin
Under BSD-3-Clause license, read LICENSE file.