public function HierarchyIsSiblingOfEntity::query in Entity Reference Hierarchy 3.x
Same name and namespace in other branches
- 8.2 src/Plugin/views/argument/HierarchyIsSiblingOfEntity.php \Drupal\entity_hierarchy\Plugin\views\argument\HierarchyIsSiblingOfEntity::query()
Set up the query for this argument.
The argument sent may be found at $this->argument.
Overrides ArgumentPluginBase::query
File
- src/
Plugin/ views/ argument/ HierarchyIsSiblingOfEntity.php, line 21
Class
- HierarchyIsSiblingOfEntity
- Argument to limit to parent of an entity.
Namespace
Drupal\entity_hierarchy\Plugin\views\argumentCode
public function query($group_by = FALSE) {
$this
->ensureMyTable();
// Load the actual entity.
$filtered = FALSE;
if ($entity = $this
->loadEntity()) {
$stub = $this->nodeKeyFactory
->fromEntity($entity);
if ($node = $this
->getTreeStorage()
->findParent($stub)) {
// Query between a range with fixed depth, excluding the original node.
$filtered = TRUE;
$lower_token = ':lower_' . $this->tableAlias;
$upper_token = ':upper_' . $this->tableAlias;
$depth_token = ':depth_' . $this->tableAlias;
$expression = "{$this->tableAlias}.{$this->realField} BETWEEN {$lower_token} and {$upper_token} AND {$this->tableAlias}.{$this->realField} <> {$lower_token} AND {$this->tableAlias}.depth = {$depth_token}";
$arguments = [
$lower_token => $node
->getLeft(),
$upper_token => $node
->getRight(),
$depth_token => $node
->getDepth() + 1,
];
if (!$this->options['show_self']) {
$self_token = ':self' . $this->tableAlias;
$expression .= " AND {$this->tableAlias}.id != {$self_token}";
$arguments[$self_token] = $stub
->getId();
}
$this->query
->addWhereExpression(0, $expression, $arguments);
}
}
// The parent entity doesn't exist, or isn't in the tree and hence has no
// children.
if (!$filtered) {
// Add a killswitch.
$this->query
->addWhereExpression(0, '1 <> 1');
}
}