"CRUD Recursivo"

Fala pessoal!

Bom, meu problema aqui é o seguinte: tenho um sistema de transações financeiras, e cada transação entrará numa categoria.

Além disso, a categoria se dividirá em subcategorias, que por sua vez também se dividirá em subcategorias, de tal forma que no banco de dados, a tabela fique assim:

O problema é que não faço ideia de como construir o CRUD disso. Ou melhor, a view "admin", onde aparece uma tabela com os itens e um conjunto de botões para apagar/atualizar cada um. Nesse caso deveria ser algo do tipo:

  • Alimentar

[list]

  • comida

  • bebida

[*]estrutural

  • servidor

[list]

  • manutenção

  • atualização

[*]dominio

[/list]

[*]transporte

[/list]

outro ponto, é que se uma categoria tiver subcategorias, ou houver transações que estejam ligadas a ela, não deve ser possível apagá-la

então, alguma ideia de como pode ser feito?

xcrazy,

Vou postar duas funções que adaptei para listar itens recursivo.




function menu() {

   $models = Galeriacategoria::model()->findAll('codpai = 0');

   $i = 0;

   foreach ($models as $model) {

	   $row['text'] = '<p class="txtRosa txtBold f14 ' . (($i > 0) ? '' : '') . ' marginBottom10px"><a href="' . Yii::app()->createUrl('galeria/index/', array('id' => $model->codgaleriacategoria)) . '">' . $model->titulo . '</a></p>';

	   $row['children'] = childs($model->codgaleriacategoria);

	   $data[] = $row;

	   $i++;

   }

   return $data;

}


function childs($id) {

   foreach (Galeriacategoria::model()->findAll('codpai = ' . $id) as $model) {

	   $row['text'] = '<p class="marginBottom5px"><a href="' . Yii::app()->createUrl('galeria/index/', array('id' => $model->codgaleriacategoria)) . '">' . $model->titulo . '</a></p>';

	   $row['children'] = childs($model->codgaleriacategoria);

	   $data[] = $row;

   }

   return $data;

}


$this->widget('CTreeView', array('data' => menu(), 'htmlOptions' => array('class' => 'treeview-newerton')));