$_table
$_table : \Cake\ORM\Table
Table instance.
Makes the table to which this is attached to behave like a nested set and provides methods for managing and retrieving information out of the derived hierarchical structure.
Tables attaching this behavior are required to have a column referencing the parent row, and two other numeric columns (lft and rght) where the implicit order will be cached.
For more information on what is a nested set and a how it works refer to https://www.sitepoint.com/hierarchical-data-database-2/
$_table : \Cake\ORM\Table
Table instance.
__construct(\Cake\ORM\Table $table, array $config = array())
Constructor
Merges config with the default and store in the config property
\Cake\ORM\Table | $table | The table this behavior is attached to. |
array | $config | The config for this behavior. |
getTable() : \Cake\ORM\Table
Get the table instance this behavior is bound to.
The bound table instance.
implementedEvents() : array
Gets the Model callbacks this behavior is interested in.
By defining one of the callback methods a behavior is assumed to be interested in the related event.
Override this method if you need to add non-conventional event listeners. Or if you want your behavior to listen to non-standard events.
implementedFinders() : array
implementedFinders
Provides an alias->methodname map of which finders a behavior implements. Example:
[
'this' => 'findThis',
'alias' => 'findMethodName'
]
With the above example, a call to $Table->find('this')
will call $Behavior->findThis()
and a call to $Table->find('alias')
will call $Behavior->findMethodName()
It is recommended, though not required, to define implementedFinders in the config property of child classes such that it is not necessary to use reflections to derive the available method list. See core behaviors for examples
implementedMethods() : array
implementedMethods
Provides an alias->methodname map of which methods a behavior implements. Example:
[
'method' => 'method',
'aliasedmethod' => 'somethingElse'
]
With the above example, a call to $Table->method()
will call $Behavior->method()
and a call to $Table->aliasedmethod()
will call $Behavior->somethingElse()
It is recommended, though not required, to define implementedFinders in the config property of child classes such that it is not necessary to use reflections to derive the available method list. See core behaviors for examples
setConfig(string|array $key, mixed|null $value = null, boolean $merge = true) : $this
Sets the config.
Setting a specific value:
$this->setConfig('key', $value);
Setting a nested value:
$this->setConfig('some.nested.key', $value);
Updating multiple config settings at the same time:
$this->setConfig(['one' => 'value', 'another' => 'value']);
string|array | $key | The key to set, or a complete array of configs. |
mixed|null | $value | The value to set. |
boolean | $merge | Whether to recursively merge or overwrite existing config, defaults to true. |
When trying to set a key that is invalid.
getConfig(string|null $key = null, mixed $default = null) : mixed
Returns the config.
Reading the whole config:
$this->getConfig();
Reading a specific value:
$this->getConfig('key');
Reading a nested value:
$this->getConfig('some.nested.key');
Reading with default value:
$this->getConfig('some-key', 'default-value');
string|null | $key | The key to get or null for the whole config. |
mixed | $default | The return value when the key does not exist. |
Config value being read.
config(string|array|null $key = null, mixed|null $value = null, boolean $merge = true) : mixed
Gets/Sets the config.
Reading the whole config:
$this->config();
Reading a specific value:
$this->config('key');
Reading a nested value:
$this->config('some.nested.key');
Setting a specific value:
$this->config('key', $value);
Setting a nested value:
$this->config('some.nested.key', $value);
Updating multiple config settings at the same time:
$this->config(['one' => 'value', 'another' => 'value']);
string|array|null | $key | The key to get/set, or a complete array of configs. |
mixed|null | $value | The value to set. |
boolean | $merge | Whether to recursively merge or overwrite existing config, defaults to true. |
When trying to set a key that is invalid.
Config value being read, or the object itself on write operations.
configShallow(string|array $key, mixed|null $value = null) : $this
Merge provided config with existing config. Unlike `config()` which does a recursive merge for nested keys, this method does a simple merge.
Setting a specific value:
$this->configShallow('key', $value);
Setting a nested value:
$this->configShallow('some.nested.key', $value);
Updating multiple config settings at the same time:
$this->configShallow(['one' => 'value', 'another' => 'value']);
string|array | $key | The key to set, or a complete array of configs. |
mixed|null | $value | The value to set. |
None found |
beforeSave(\Cake\Event\Event $event, \Cake\Datasource\EntityInterface $entity) : void
Before save listener.
Transparently manages setting the lft and rght fields if the parent field is included in the parameters to be saved.
\Cake\Event\Event | $event | The beforeSave event that was fired |
\Cake\Datasource\EntityInterface | $entity | the entity that is going to be saved |
if the parent to set for the node is invalid
None found |
afterSave(\Cake\Event\Event $event, \Cake\Datasource\EntityInterface $entity) : void
After save listener.
Manages updating level of descendants of currently saved entity.
\Cake\Event\Event | $event | The afterSave event that was fired |
\Cake\Datasource\EntityInterface | $entity | the entity that is going to be saved |
None found |
beforeDelete(\Cake\Event\Event $event, \Cake\Datasource\EntityInterface $entity) : void
Also deletes the nodes in the subtree of the entity to be delete
\Cake\Event\Event | $event | The beforeDelete event that was fired |
\Cake\Datasource\EntityInterface | $entity | The entity that is going to be saved |
None found |
findPath(\Cake\ORM\Query $query, array $options) : \Cake\ORM\Query
Custom finder method which can be used to return the list of nodes from the root to a specific node in the tree. This custom finder requires that the key 'for' is passed in the options containing the id of the node to get its path for.
\Cake\ORM\Query | $query | The constructed query to modify |
array | $options | the list of options for the query |
If the 'for' key is missing in options
None found |
childCount(\Cake\Datasource\EntityInterface $node, boolean $direct = false) : integer
Get the number of children nodes.
\Cake\Datasource\EntityInterface | $node | The entity to count children for |
boolean | $direct | whether to count all nodes in the subtree or just direct children |
Number of children nodes.
None found |
findChildren(\Cake\ORM\Query $query, array $options) : \Cake\ORM\Query
Get the children nodes of the current model
Available options are:
If the direct option is set to true, only the direct children are returned (based upon the parent_id field)
\Cake\ORM\Query | $query | Query. |
array | $options | Array of options as described above |
When the 'for' key is not passed in $options
None found |
findTreeList(\Cake\ORM\Query $query, array $options) : \Cake\ORM\Query
Gets a representation of the elements in the tree as a flat list where the keys are the primary key for the table and the values are the display field for the table.
Values are prefixed to visually indicate relative depth in the tree.
\Cake\ORM\Query | $query | Query. |
array | $options | Array of options as described above. |
None found |
formatTreeList(\Cake\ORM\Query $query, array $options = array()) : \Cake\ORM\Query
Formats query as a flat list where the keys are the primary key for the table and the values are the display field for the table. Values are prefixed to visually indicate relative depth in the tree.
\Cake\ORM\Query | $query | The query object to format. |
array | $options | Array of options as described above. |
Augmented query.
None found |
removeFromTree(\Cake\Datasource\EntityInterface $node) : \Cake\Datasource\EntityInterface|false
Removes the current node from the tree, by positioning it as a new root and re-parents all children up one level.
Note that the node will not be deleted just moved away from its current position without moving its children with it.
\Cake\Datasource\EntityInterface | $node | The node to remove from the tree |
the node after being removed from the tree or false on error
None found |
moveUp(\Cake\Datasource\EntityInterface $node, integer|boolean $number = 1) : \Cake\Datasource\EntityInterface|boolean
Reorders the node without changing its parent.
If the node is the first child, or is a top level node with no previous node this method will return false
\Cake\Datasource\EntityInterface | $node | The node to move |
integer|boolean | $number | How many places to move the node, or true to move to first position |
When node was not found
$node The node after being moved or false on failure
None found |
moveDown(\Cake\Datasource\EntityInterface $node, integer|boolean $number = 1) : \Cake\Datasource\EntityInterface|boolean
Reorders the node without changing the parent.
If the node is the last child, or is a top level node with no subsequent node this method will return false
\Cake\Datasource\EntityInterface | $node | The node to move |
integer|boolean | $number | How many places to move the node or true to move to last position |
When node was not found
the entity after being moved or false on failure
None found |
recover() : void
Recovers the lft and right column values out of the hierarchy defined by the parent column.
None found |
getLevel(integer|string|\Cake\Datasource\EntityInterface $entity) : integer|boolean
Returns the depth level of a node in the tree.
integer|string|\Cake\Datasource\EntityInterface | $entity | The entity or primary key get the level of. |
Integer of the level or false if the node does not exist.
None found |
_resolveMethodAliases(string $key, array $defaults, array $config) : array
Removes aliased methods that would otherwise be duplicated by userland configuration.
string | $key | The key to filter. |
array | $defaults | The default method mappings. |
array | $config | The customized method mappings. |
A de-duped list of config data.
None found |
_reflectionCache() : array
Gets the methods implemented by this behavior
Uses the implementedEvents() method to exclude callback methods.
Methods starting with _
will be ignored, as will methods
declared on Cake\ORM\Behavior
None found |
_configRead(string|null $key) : mixed
Reads a config key.
string|null | $key | Key to read. |
None found |
_configWrite(string|array $key, mixed $value, boolean|string $merge = false) : void
Writes a config key.
string|array | $key | Key to write to. |
mixed | $value | Value to write. |
boolean|string | $merge | True to merge recursively, 'shallow' for simple merge, false to overwrite, defaults to false. |
if attempting to clobber existing config
None found |
_configDelete(string $key) : void
Deletes a single config key.
string | $key | Key to delete. |
if attempting to clobber existing config
None found |
_setChildrenLevel(\Cake\Datasource\EntityInterface $entity) : void
Set level for descendants.
\Cake\Datasource\EntityInterface | $entity | The entity whose descendants need to be updated. |
None found |
_setParent(\Cake\Datasource\EntityInterface $entity, mixed $parent) : void
Sets the correct left and right values for the passed entity so it can be updated to a new parent. It also makes the hole in the tree so the node move can be done without corrupting the structure.
\Cake\Datasource\EntityInterface | $entity | The entity to re-parent |
mixed | $parent | the id of the parent to set |
if the parent to set to the entity is not valid
None found |
_setAsRoot(\Cake\Datasource\EntityInterface $entity) : void
Updates the left and right column for the passed entity so it can be set as a new root in the tree. It also modifies the ordering in the rest of the tree so the structure remains valid
\Cake\Datasource\EntityInterface | $entity | The entity to set as a new root |
None found |
_unmarkInternalTree() : void
Helper method used to invert the sign of the left and right columns that are less than 0. They were set to negative values before so their absolute value wouldn't change while performing other tree transformations.
None found |
_removeFromTree(\Cake\Datasource\EntityInterface $node) : \Cake\Datasource\EntityInterface|false
Helper function containing the actual code for removeFromTree
\Cake\Datasource\EntityInterface | $node | The node to remove from the tree |
the node after being removed from the tree or false on error
None found |
_moveUp(\Cake\Datasource\EntityInterface $node, integer|boolean $number) : \Cake\Datasource\EntityInterface|boolean
Helper function used with the actual code for moveUp
\Cake\Datasource\EntityInterface | $node | The node to move |
integer|boolean | $number | How many places to move the node, or true to move to first position |
When node was not found
$node The node after being moved or false on failure
None found |
_moveDown(\Cake\Datasource\EntityInterface $node, integer|boolean $number) : \Cake\Datasource\EntityInterface|boolean
Helper function used with the actual code for moveDown
\Cake\Datasource\EntityInterface | $node | The node to move |
integer|boolean | $number | How many places to move the node, or true to move to last position |
When node was not found
$node The node after being moved or false on failure
None found |
_getNode(mixed $id) : \Cake\Datasource\EntityInterface
Returns a single node from the tree from its primary key
mixed | $id | Record id. |
When node was not found
None found |
_recoverTree(integer $counter, mixed $parentId = null, integer $level = -1) : integer
Recursive method used to recover a single level of the tree
integer | $counter | The Last left column value that was assigned |
mixed | $parentId | the parent id of the level to be recovered |
integer | $level | Node level |
The next value to use for the left column
None found |
None found |
_sync(integer $shift, string $dir, string $conditions, boolean $mark = false) : void
Auxiliary function used to automatically alter the value of both the left and right columns by a certain amount that match the passed conditions
integer | $shift | the value to use for operating the left and right columns |
string | $dir | The operator to use for shifting the value (+/-) |
string | $conditions | a SQL snipped to be used for comparing left or right against it. |
boolean | $mark | whether to mark the updated values so that they can not be modified by future calls to this function. |
None found |
_scope(\Cake\ORM\Query $query) : \Cake\ORM\Query
Alters the passed query so that it only returns scoped records as defined in the tree configuration.
\Cake\ORM\Query | $query | the Query to modify |
None found |
_ensureFields(\Cake\Datasource\EntityInterface $entity) : void
Ensures that the provided entity contains non-empty values for the left and right fields
\Cake\Datasource\EntityInterface | $entity | The entity to ensure fields for |
None found |
_getPrimaryKey() : string
Returns a single string value representing the primary key of the attached table
None found |