示例#1
0
 /**
  * Validates bounds of the nested tree structure. It will perform checks on
  * the `lft`, `rgt` and `parent_id` columns. Mainly that they're not null,
  * rights greater than lefts, and that they're within the bounds of the parent.
  *
  * @return boolean
  */
 protected function validateBounds()
 {
     $connection = $this->node->getConnection();
     $grammar = $connection->getQueryGrammar();
     $tableName = $this->node->getTable();
     $primaryKeyName = $this->node->getKeyName();
     $parentColumn = $this->node->getQualifiedParentColumnName();
     $lftCol = $grammar->wrap($this->node->getLeftColumnName());
     $rgtCol = $grammar->wrap($this->node->getRightColumnName());
     $qualifiedLftCol = $grammar->wrap($this->node->getQualifiedLeftColumnName());
     $qualifiedRgtCol = $grammar->wrap($this->node->getQualifiedRightColumnName());
     $qualifiedParentCol = $grammar->wrap($this->node->getQualifiedParentColumnName());
     $whereStm = "({$qualifiedLftCol} IS NULL OR\n      {$qualifiedRgtCol} IS NULL OR\n      {$qualifiedLftCol} >= {$qualifiedRgtCol} OR\n      ({$qualifiedParentCol} IS NOT NULL AND\n        ({$qualifiedLftCol} <= parent.{$lftCol} OR\n          {$qualifiedRgtCol} >= parent.{$rgtCol})))";
     $query = $this->node->newQuery()->join($connection->raw($grammar->wrapTable($tableName) . ' AS parent'), $parentColumn, '=', $connection->raw('parent.' . $grammar->wrap($primaryKeyName)), 'left outer')->whereRaw($whereStm);
     return $query->count() == 0;
 }
示例#2
0
 /**
  * Get the fully qualified value for the specified column.
  *
  * @return string
  */
 protected function qualify($column)
 {
     return $this->node->getTable() . '.' . $column;
 }