parent_column
__PACKAGE__->parent_column('parent_id');
Declares the name of the column that contains the self-referential ID which defines the parent row. This
will create a has_many (children) and belongs_to (parent) relationship.
This method also sets up an additional has_many relationship called parents which is useful when you want
to treat an adjacency list as a DAG.
repair_tree
__PACKAGE__->repair_tree( 1 );
When set a true value this flag causes all changes to a node's parent to trigger an integrity check on
the tree. If, when changing a node's parent to one of it's descendents then all its children will first
be moved to have the same current parent, and then the node's parent is changed.
So, for example, if the tree is like this:
A
B
C
D
E
F
And you execute:
$b->parent( $d );
Since D is a descendant of B then all of D's siblings get their parent changed to A. Then B's parent is
set to D.
A
C
D
B
E
F
parent
my $parent = $employee->parent();
$employee->parent( $parent_obj );
$employee->parent( $parent_id );
Retrieves the object's parent object, or changes the object's parent to the specified parent or parent
ID. If you would like to make the object the root node, just set the parent to 0.
If you are setting the parent then 0 will be returned if the specified parent is already the object's
parent and 1 on success.
ancestors
@list = $employee->ancestors();
Returns a list of ancestors starting with a record's parent and moving toward the tree root.
has_descendant
if ($employee->has_descendant( $id )) { ... }
Returns true if the object has a descendant with the specified ID.
parents
my $parents = $node->parents();
my @parents = $node->parents();
This has_many relationship is not that useful as it will never return more than one parent due to the
one-to-many structure of adjacency lists. The reason this relationship is defined is so that this tree
type may be treated as if it was a DAG.
children
my $children_rs = $employee->children();
my @children = $employee->children();
Returns a list or record set, depending on context, of all the objects one level below the current one.
This method is created when parent_column() is called, which sets up a has_many relationship called
children.
attach_child
$parent->attach_child( $child );
$parent->attach_child( $child, $child, ... );
Sets the child, or children, to the new parent. Returns 1 on success and returns 0 if the parent object
already has the child.
siblings
my $rs = $node->siblings();
my @siblings = $node->siblings();
Returns either a result set or an array of all other objects with the same parent as the calling object.
attach_sibling
$obj->attach_sibling( $sibling );
$obj->attach_sibling( $sibling, $sibling, ... );
Sets the passed in object(s) to have the same parent as the calling object. Returns 1 on success and 0
if the sibling already has the same parent.
is_leaf
if ($obj->is_leaf()) { ... }
Returns 1 if the object has no children, and 0 otherwise.
is_root
if ($obj->is_root()) { ... }
Returns 1 if the object has no parent, and 0 otherwise.
is_branch
if ($obj->is_branch()) { ... }
Returns 1 if the object has a parent and has children. Returns 0 otherwise.
set_primary_key
This method is an override of DBIx::Class' method for setting the class' primary key column(s). This
method passes control right on to the normal method after first validating that only one column is being
selected as a primary key. If more than one column is then an error will be thrown.