/**
  * DescendantsRelation constructor.
  *
  * @param QueryBuilder $builder
  * @param Model $model
  */
 public function __construct(QueryBuilder $builder, Model $model)
 {
     if (!NestedSet::isNode($model)) {
         throw new InvalidArgumentException('Model must be node.');
     }
     parent::__construct($builder, $model);
 }
Example #2
0
 /**
  * @param mixed $root
  *
  * @return int
  */
 protected function getRootNodeId($root = false)
 {
     if (NestedSet::isNode($root)) {
         return $root->getKey();
     }
     if ($root !== false) {
         return $root;
     }
     // If root node is not specified we take parent id of node with
     // least lft value as root node id.
     $leastValue = null;
     /** @var Model|NodeTrait $node */
     foreach ($this->items as $node) {
         if ($leastValue === null || $node->getLft() < $leastValue) {
             $leastValue = $node->getLft();
             $root = $node->getParentId();
         }
     }
     return $root;
 }
Example #3
0
 /**
  * @param $id
  * @param $operator
  * @param $boolean
  *
  * @return $this
  */
 protected function whereIsBeforeOrAfter($id, $operator, $boolean)
 {
     if (NestedSet::isNode($id)) {
         $value = '?';
         $this->query->addBinding($id->getLft());
     } else {
         $valueQuery = $this->model->newQuery()->toBase()->select('_n.' . $this->model->getLftName())->from($this->model->getTable() . ' as _n')->where('_n.' . $this->model->getKeyName(), '=', $id);
         $this->query->mergeBindings($valueQuery);
         $value = '(' . $valueQuery->toSql() . ')';
     }
     list($lft, ) = $this->wrappedColumns();
     $this->query->whereRaw("{$lft} {$operator} {$value}", [], $boolean);
     return $this;
 }