doctrine2-nestedset icon indicating copy to clipboard operation
doctrine2-nestedset copied to clipboard

Three level deep example?

Open toaomatis opened this issue 12 years ago • 0 comments

Currently I'm trying to generate a three level deep nested set for a menu structure. I would like to get the following structure:

  • Root
    • Home
    • Checklist
      • List
      • New
      • Statistics
    • User
      • Login
      • Register

I've written the following code

$perm_menu_default = $this->em->find('Entity\Permission', 1);
if($perm_menu_default === null)
{
    $perm_menu_default = new Permission();
    $perm_menu_default->setName('menu-list-default');
    $perm_menu_default->setDescription('Can view default menu.');
    $this->em->persist($perm_menu_default);
    $this->em->flush();
}

$config = new Config($this->em, 'Entity\Menu');
$nsm = new Manager($config);

$menu_root = new Menu();
$menu_root->setName('Default Menu');
$menu_root->setPermission($perm_menu_default);

$menu_home = new Menu();
$menu_home->setName('Home');
$menu_home->setPermission($perm_menu_default);

$menu_cl = new Menu();
$menu_cl->setName('Checklist');
$menu_cl->setPermission($perm_menu_default);

$menu_cl_list = new Menu();
$menu_cl_list->setName('List');
$menu_cl_list->setPermission($perm_menu_default);

$menu_cl_new = new Menu();
$menu_cl_new->setName('New');
$menu_cl_new->setPermission($perm_menu_default);

$menu_cl_stats = new Menu();
$menu_cl_stats->setName('Statistics');
$menu_cl_stats->setPermission($perm_menu_default);

$menu_user = new Menu();
$menu_user->setName('User');
$menu_user->setPermission($perm_menu_default);

$menu_user_login = new Menu();
$menu_user_login->setName('Login');
$menu_user_login->setPermission($perm_menu_default);

$menu_user_register = new Menu();
$menu_user_register->setName('Register');
$menu_user_register->setPermission($perm_menu_default);

$menu_user_forgot = new Menu();
$menu_user_forgot->setName('Forgot Password');
$menu_user_forgot->setPermission($perm_menu_default);

$node_root = $nsm->createRoot($menu_root);

$node_cl = $nsm->wrapNode($menu_cl);
$node_root->addChild($menu_cl);
$node_cl->addChild($menu_cl_list);
$node_cl->addChild($menu_cl_new);
$node_cl->addChild($menu_cl_stats);

$node_user = $nsm->wrapNode($menu_user);
$node_root->addChild($menu_user);
$node_user->addChild($menu_user_login);
$node_user->addChild($menu_user_register);
$node_user->addChild($menu_user_forgot);

$node_root->addChild($menu_home);

var_dump($node_root);

This results in the following (wrong) mysql entries

'id,'permission_id','lft','rgt','name','root','url'
'9', '1', '1', '8', 'Default Menu', '9', '/'
'10', '1', '8', '21', 'Checklist', '9', '/'
'11', '1', '15', '16', 'List', '9', '/'
'12', '1', '17', '18', 'New', '9', '/'
'13', '1', '19', '20', 'Statistics', '9', '/'
'14', '1', '8', '15', 'User', '9', '/'
'15', '1', '9', '10', 'Login', '9', '/'
'16', '1', '11', '12', 'Register', '9', '/'
'17', '1', '13', '14', 'Forgot Password', '9', '/'
'18', '1', '6', '7', 'Home', '9', '/'

As you can see, the root does not embrace all the sub entries. What am I doing wrong?

toaomatis avatar Oct 04 '12 12:10 toaomatis