1
resposta

Ao excluir dados da tabela pai, excluir também os dados das tabelas filhas, caso existam.

Boa noite. No Cakephp quando se relaciona duas ou mais tabelas no Model, você pode passar um parâmetro chamado 'dependent' => true. Isso faz com que ao excluir um registro da tabela categorias (Tabela pai) por exemplo, exclua também os registros da tabela produtos (Tabela filha) relacionados aquela categoria.

Exemplo Cakephp:

class Categoria extends AppModel {
    public $hasMany = array(
         Produto => array(
            'className' => 'Produto',
            'foreignKey' => 'categoria_id',
            'dependent' => true,
         )
    );
}

Eu gostaria de saber se existe algo parecido no CodeIgniter.

Procurei no Google e em alguns fóruns, porém não encontrei nada do tipo.

Att, Maurício.

1 resposta

Oi Mauricio, tudo bom?

Acredito que a funcionalidade que você está procurando seja a de cascade delete. Ao remover uma instancia do banco que possui foreign keys, a deleção dessas também é realizada.

Normalmente o que os frameworks fazem quando a gente aponta esse tipo de funcionalidade, por baixo dos panos, é alterar a definição da tabela no banco, apontando esse comportamento.

Dei uma procurada aqui e parece que o codeigniter não implementa isso =/

Mas, você pode configurar no lado do seu banco também. Para isso você precisaria gerar um dump das suas tabelas (para garantir que no pior dos casos você n vai perder seus dados), para recria-las com a opção de cascade delete. Algo como:

ALTER TABLE child_table_name 
   ADD CONSTRAINT `fk_name `
   FOREIGN KEY (`child_column_name` )
   REFERENCES `members` (`parent_column_name` )
   ON DELETE CASCADE

Qualquer problema é só falar.

Abraço e bons estudos.