/**
  * @param EloquentBuilder $query
  * @param EloquentBuilder $parent
  * @param array $columns
  *
  * @return mixed
  */
 public function getRelationQuery(EloquentBuilder $query, EloquentBuilder $parent, $columns = ['*'])
 {
     $query->select($columns);
     $table = $query->getModel()->getTable();
     $query->from($table . ' as ' . ($hash = $this->getRelationCountHash()));
     $grammar = $query->getQuery()->getGrammar();
     $table = $grammar->wrapTable($table);
     $hash = $grammar->wrapTable($hash);
     $lft = $grammar->wrap($this->parent->getLftName());
     $rgt = $grammar->wrap($this->parent->getRgtName());
     return $query->whereRaw("{$hash}.{$lft} between {$table}.{$lft} + 1 and {$table}.{$rgt}");
 }
Example #2
0
 /**
  * Fixes the tree based on parentage info.
  *
  * Nodes with invalid parent are saved as roots.
  *
  * @return int The number of fixed nodes
  */
 public function fixTree()
 {
     $columns = [$this->model->getKeyName(), $this->model->getParentIdName(), $this->model->getLftName(), $this->model->getRgtName()];
     $dictionary = $this->model->newNestedSetQuery()->defaultOrder()->get($columns)->groupBy($this->model->getParentIdName())->all();
     return self::fixNodes($dictionary);
 }