harp-orm / materialized-path
Materialized path nesting for Harp ORM models
Installs: 183
Dependents: 2
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
pkg:composer/harp-orm/materialized-path
Requires
- php: >=5.4.0
- harp-orm/harp: ~0.3.0
README
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.