FOF30\Model\TreeModel::scopeImmediateDescendants PHP Метод

scopeImmediateDescendants() защищенный Метод

get() will only return immediate descendants (first level children) of the current node
protected scopeImmediateDescendants ( ) : void
Результат void
    protected function scopeImmediateDescendants()
    {
        // Sanity checks on current node position
        if ($this->lft >= $this->rgt) {
            throw new TreeInvalidLftRgtCurrent();
        }
        $db = $this->getDbo();
        $fldLft = $db->qn($this->getFieldAlias('lft'));
        $fldRgt = $db->qn($this->getFieldAlias('rgt'));
        $subQuery = $db->getQuery(true)->select(array($db->qn('node') . '.' . $fldLft, '(COUNT(*) - 1) AS ' . $db->qn('depth')))->from($db->qn($this->tableName) . ' AS ' . $db->qn('node'))->from($db->qn($this->tableName) . ' AS ' . $db->qn('parent'))->where($db->qn('node') . '.' . $fldLft . ' >= ' . $db->qn('parent') . '.' . $fldLft)->where($db->qn('node') . '.' . $fldLft . ' <= ' . $db->qn('parent') . '.' . $fldRgt)->where($db->qn('node') . '.' . $fldLft . ' = ' . $db->q($this->lft))->group($db->qn('node') . '.' . $fldLft)->order($db->qn('node') . '.' . $fldLft . ' ASC');
        $query = $db->getQuery(true)->select(array($db->qn('node') . '.' . $fldLft, '(COUNT(' . $db->qn('parent') . '.' . $fldLft . ') - (' . $db->qn('sub_tree') . '.' . $db->qn('depth') . ' + 1)) AS ' . $db->qn('depth')))->from($db->qn($this->tableName) . ' AS ' . $db->qn('node'))->join('CROSS', $db->qn($this->tableName) . ' AS ' . $db->qn('parent'))->join('CROSS', $db->qn($this->tableName) . ' AS ' . $db->qn('sub_parent'))->join('CROSS', '(' . $subQuery . ') AS ' . $db->qn('sub_tree'))->where($db->qn('node') . '.' . $fldLft . ' >= ' . $db->qn('parent') . '.' . $fldLft)->where($db->qn('node') . '.' . $fldLft . ' <= ' . $db->qn('parent') . '.' . $fldRgt)->where($db->qn('node') . '.' . $fldLft . ' >= ' . $db->qn('sub_parent') . '.' . $fldLft)->where($db->qn('node') . '.' . $fldLft . ' <= ' . $db->qn('sub_parent') . '.' . $fldRgt)->where($db->qn('sub_parent') . '.' . $fldLft . ' = ' . $db->qn('sub_tree') . '.' . $fldLft)->group($db->qn('node') . '.' . $fldLft)->having(array($db->qn('depth') . ' > ' . $db->q(0), $db->qn('depth') . ' <= ' . $db->q(1)))->order($db->qn('node') . '.' . $fldLft . ' ASC');
        $leftValues = $db->setQuery($query)->loadColumn();
        if (empty($leftValues)) {
            $leftValues = array(0);
        }
        array_walk($leftValues, function (&$item, $key) use(&$db) {
            $item = $db->q($item);
        });
        $this->whereRaw($db->qn('node') . '.' . $fldLft . ' IN (' . implode(',', $leftValues) . ')');
    }