コード例 #1
0
ファイル: Move.php プロジェクト: sonars/tree
 /**
  * Quotes an identifier for being used in a database query.
  *
  * @param mixed $value
  * @return string
  */
 protected function quoteIdentifier($value)
 {
     if (is_null($value)) {
         return 'NULL';
     }
     $connection = $this->node->getConnection();
     $pdo = $connection->getPdo();
     return $pdo->quote($value);
 }
コード例 #2
0
ファイル: SetBuilder.php プロジェクト: sonars/tree
 /**
  * Perform the re-calculation of the left and right indexes of the whole
  * nested set tree structure.
  *
  * @param  bool $force
  * @return void
  */
 public function rebuild($force = false)
 {
     $alreadyValid = forward_static_call(array(get_class($this->node), 'isValidNestedSet'));
     // Do not rebuild a valid Nested Set tree structure
     if (!$force && $alreadyValid) {
         return true;
     }
     // Rebuild lefts and rights for each root node and its children (recursively).
     // We go by setting left (and keep track of the current left bound), then
     // search for each children and recursively set the left index (while
     // incrementing that index). When going back up the recursive chain we start
     // setting the right indexes and saving the nodes...
     $self = $this;
     $this->node->getConnection()->transaction(function () use($self) {
         foreach ($self->roots() as $root) {
             $self->rebuildBounds($root, 0);
         }
     });
 }
コード例 #3
0
ファイル: SetValidator.php プロジェクト: sonars/tree
 /**
  * Checks if duplicate values for the column specified exist. Takes
  * the Nested Set scope columns into account (if appropiate).
  *
  * @param   string  $column
  * @return  boolean
  */
 protected function duplicatesExistForColumn($column)
 {
     $connection = $this->node->getConnection();
     $grammar = $connection->getQueryGrammar();
     $columns = array_merge($this->node->getQualifiedScopedColumns(), array($column));
     $columnsForSelect = implode(', ', array_map(function ($col) use($grammar) {
         return $grammar->wrap($col);
     }, $columns));
     $wrappedColumn = $grammar->wrap($column);
     $query = $this->node->newQuery()->select($connection->raw("{$columnsForSelect}, COUNT({$wrappedColumn})"))->havingRaw("COUNT({$wrappedColumn}) > 1");
     foreach ($columns as $col) {
         $query->groupBy($col);
     }
     $result = $query->first();
     return !is_null($result);
 }
コード例 #4
0
ファイル: SetMapper.php プロジェクト: sonars/tree
 protected function wrapInTransaction(Closure $callback)
 {
     return $this->node->getConnection()->transaction($callback);
 }