Tree¶
- class Nos\Orm_Behaviour_Tree¶
- Makes a Nos\Orm\Model behaves like a Tree.An item can then have a parent and children (all of the same Model).
Configuration¶
- property Nos\Orm_Behaviour_Tree::$level_property¶
Column used to store the item’s depth inside the tree. Data type must be int.
Method¶
- Nos\Orm_Behaviour_Tree::get_parent()¶
Returns: Model parent item, if it exists, null otherwise.
- Nos\Orm_Behaviour_Tree::set_parent($new_parent)¶
Set a new parent for the item.
If the item is twinnable and if it exists in several contexts, all contexts will be moved synchronously.
Parameters: - $new_parent (Model) – New parent Model of the item (use null to remove the parent).
Throws: Exception when:
- the item is moved in its own tree ;
- the item is twinnable and its parent does not exist in one of the contexts of the current item.
- Nos\Orm_Behaviour_Tree::find_children($where = array(), $order_by = array(), $options = array())¶
Returns: All direct children of item. Children can be filter and / or sort by parameters.
This method use native method Model->find().$options parameter are passed to ->find() like that:<?php $options = \Arr::merge($options, array( 'where' => $where, 'order_by' => $order_by, ));
- Nos\Orm_Behaviour_Tree::find_children_recursive($include_self = true)¶
Parameters: - $include_self (boolean) – If true, include current item in return.
Returns: All children of item and their descendants.
- Nos\Orm_Behaviour_Tree::find_root()¶
Returns: First ascendant of item in tree or null if item has no parent.
Other¶
This behaviour extends Model->find().
Add option to where array passed to method : you can use parent key as alias for search in Orm_Behaviour_Tree::$parent_relation relation.
Example¶
<?php
class Model_Page extends \Nos\Orm\Model
{
protected static $_behaviours = array(
'Nos\Orm_Behaviour_Tree' => array(
'events' => array('before_query', 'after_delete'),
'parent_relation' => 'parent',
'children_relation' => 'children',
'level_property' => 'page_level',
),
);
protected static $_has_many = array(
'children' => array(
'key_from' => 'page_id',
'model_to' => 'Nos\Model_Page',
'key_to' => 'page_parent_id',
'cascade_save' => false,
'cascade_delete' => false,
),
);
protected static $_belongs_to = array(
'parent' => array(
'key_from' => 'page_parent_id',
'model_to' => 'Nos\Model_Page',
'key_to' => 'page_id',
'cascade_save' => false,
'cascade_delete' => false,
),
);
}