public function actionIndex($id) { $thread = Tree::findOne((int) $id); if (!$thread) { return $this->redirect('/'); } $tree = new Tree(); $data = $tree->buildTree($thread); return $this->render('index', ['jsonString' => $data, 'id' => $id]); }
/** * generate tree * @param $count * @param null $parent_id */ public function generateTree($count, $parent_id = null) { $tree = Yii::$app->mongodb->getCollection('tree'); if ($parent_id) { $thread = Tree::findOne($parent_id); $key = $thread->right_key; $level = $thread->level + 1; } else { $key = Tree::find()->max('right_key'); $key++; $level = 0; } $id = $this->getLastId(); for ($i = 0; $i < $count; $i++, $id++, $key += 2) { if ($parent_id) { $tree->update(['left_key' => ['$gt' => $key]], ['$inc' => ['right_key' => 2, 'left_key' => 2]]); $tree->update(['right_key' => ['$gte' => $key], 'left_key' => ['$lt' => $key]], ['$inc' => ['right_key' => 2]]); } $tree->insert(['left_key' => $key, 'right_key' => $key + 1, 'name' => $id, 'level' => $level, '_id' => $id]); } }