public function whereAncestorOf($id, $andSelf = FALSE, $boolean = 'and')
    {
        $keyName = $this->model->getKeyName();

        if (NestedSet::isNode($id)) {
            $value = '?';

            $this->query->addBinding($id->getRgt());

            $id = $id->getKey();
        }
        else {
            $valueQuery = $this->model
                ->newQuery()
                ->toBase()
                ->select("_.".$this->model->getRgtName())
                ->from($this->model->getTable().' as _')
                ->where($keyName, '=', $id)
                ->limit(1);

            $this->query->mergeBindings($valueQuery);

            $value = '('.$valueQuery->toSql().')';
        }

        $this->query->whereNested(function ($inner) use ($value, $andSelf, $id) {
            list($lft, $rgt) = $this->wrappedColumns();

            $inner->whereRaw("{$value} between {$lft} and {$rgt}");

            if (!$andSelf) {
                $inner->where($this->model->getKeyName(), '<>', $id);
            }
        }, $boolean);

        return $this;
    }
public function whereAncestorOf($id, $andSelf = FALSE, $boolean = 'and')
    {
        $keyName = $this->model->getKeyName();

        if (NestedSet::isNode($id)) {
            $value = '?';

            $this->query->addBinding($id->getRgt());

            $id = $id->getKey();
        }
        else {
            $valueQuery = $this->model
                ->newQuery()
                ->toBase()
                ->select("_.".$this->model->getRgtName())
                ->from($this->model->getTable().' as _')
                ->where($keyName, '=', $id)
                ->limit(1);

            $this->query->mergeBindings($valueQuery);

            $value = '('.$valueQuery->toSql().')';
        }

        $this->query->whereNested(function ($inner) use ($value, $andSelf, $id) {
            list($lft, $rgt) = $this->wrappedColumns();

            $inner->whereRaw("{$value} between {$lft} and {$rgt}");

            if (!$andSelf) {
                $inner->where($this->model->getKeyName(), '<>', $id);
            }
        }, $boolean);

        return $this;
    }
public function whereAncestorOf ( $ id , $ andSelf = FALSE , $ boolean = 'and' ) { $ keyName = $ this -> model -> getKeyName ( ) ; if ( NestedSet :: isNode ( $ id ) ) { $ value = '?' ; $ this -> query -> addBinding ( $ id -> getRgt ( ) ) ; $ id = $ id -> getKey ( ) ; } else { $ valueQuery = $ this -> model -> newQuery ( ) -> toBase ( ) -> select ( "_." . $ this -> model -> getRgtName ( ) ) -> from ( $ this -> model -> getTable ( ) . ' as _' ) -> where ( $ keyName , '=' , $ id ) -> limit ( 1 ) ; $ this -> query -> mergeBindings ( $ valueQuery ) ; $ value = '(' . $ valueQuery -> toSql ( ) . ')' ; } $ this -> query -> whereNested ( function ( $ inner ) use ( $ value , $ andSelf , $ id ) { list ( $ lft , $ rgt ) = $ this -> wrappedColumns ( ) ; $ inner -> whereRaw ( "{$value} between {$lft} and {$rgt}" ) ; if ( ! $ andSelf ) { $ inner -> where ( $ this -> model -> getKeyName ( ) , '<>' , $ id ) ; } } , $ boolean ) ; return $ this ; }
Limit results to ancestors of specified node.

@since 2.0

@param mixed $id
@param bool $andSelf

@param string $boolean

@return $this
Limit results to ancestors of specified node .