laravel-nestedset
laravel-nestedset copied to clipboard
My workaround to rebuildTree().
This solution updates existing nodes and also creates new nodes if they are added. But it doesn't remove the old nodes.
$array = [
[
'name' => 'home',
'description' => 'Painel'
],
[
'name' => 'management_group_view',
'description' => 'Gerenciamento',
'children' => [
[
'name' => 'users_group_view',
'description' => 'Usuários',
'children' => [
array('name' => 'users_view', 'description' => 'Visualizar'),
array('name' => 'users_create', 'description' => 'Criar'),
array('name' => 'users_edit', 'description' => 'Editar'),
array('name' => 'users_delete', 'description' => 'Deletar'),
]
],
[
'name' => 'roles_group_view',
'description' => 'Atribuições',
'children' => [
array('name' => 'roles_view', 'description' => 'Visualizar'),
array('name' => 'roles_create', 'description' => 'Criar'),
array('name' => 'roles_edit', 'description' => 'Editar'),
array('name' => 'roles_delete', 'description' => 'Deletar'),
]
],
[
'name' => 'permissions_group_view',
'description' => 'Permissões',
'children' => [
array('name' => 'permissions_view', 'description' => 'Visualizar'),
array('name' => 'permissions_create', 'description' => 'Criar'),
array('name' => 'permissions_edit', 'description' => 'Editar'),
array('name' => 'permissions_delete', 'description' => 'Deletar')
]
]
]
]
];
function percorrerArray($array, $parent = null)
{
foreach ($array as $value) {
if (array_key_exists('name', $value)) {
$permission = Permission::updateOrCreate(
['name' => $value['name']],
[
'description' => $value['description'],
'parent_id' => $parent ? $parent->id : null,
]
);
if (array_key_exists('children', $value)) {
percorrerArray($value['children'], $permission);
}
}
}
}
percorrerArray($array);