Fazer insert em multiplas tabelas no banco de dados tratanto exceções
Bom, olá...
Gostaria de saber quais técnicas existem para atender a seguinte condição:
Hoje em dia, devido novos conceitos, tanto na parte de programação, quando na parte de criação de DER, tenho a seguinte dúvida cruel... fazer insert em multiplas tabelas...
Bom, eu tenho que cadastrar cliente no meu sistema, porém a tabela cliente tem relação com pelo menos umas 10 tabelas.. (endereco, email, usuario, avatar, etc....)
Hoje para realizar esse cadastro o que faço:
/*
* Cadastrando cliente
*/
// Cadastrando endereco
$sql = "Insert into endereco set logradouro = '$logradouro', numero = '$numero'.....";
$query = mysql_query($sql);
// Verifico se consegui cadastrar o endereco
if($query == true){
$idendereco = mysql_insert_id();
// Cadastrando email
$sql = "Insert into email set nome = '$email'";
$query = mysql_query($sql);
// Verifico se consegui cadastrar o email
if($query == true){
$idemail = mysql_insert_id();
// Cadastrando cliente
$sql = "Insert into cliente set nome = '$nome', endereco_idendereco = $idendereco, email_idemail = $idemail";
$query = mysql_query($sql);
// Verifico se consegui cadastrar o cliente
if($query == true){
$return TRUE;
}else{
// se nao consegui cadastrar o cliente delete o endereco e email_idemail
$sql = "Delete from endereco where idendereco = '$idendereco'";
mysql_query($sql);
$sql = "Delete from email where idemail = '$idemail'";
mysql_query($sql);
return FALSE;
}
}else{
// Se eu nao consegui cadastrar o email eu deleto o registro do endereco
$sql = "Delete from endereco where idendereco = '$idendereco'";
mysql_query($sql);
return FALSE;
}
}else{
// Se eu nao consegui cadastrar o endereco retorno false
return FALSE;
}
Isso acima foi apenas para realizar cadastro envolvendo 3 tabelas com poucos atributos.. lembrando que o exemplo acima foi improvisado, se funciona.. é outra história.. rsrrs
Enfim.. imagina isso ai com umas 10 tabelas.. :( vai ser massante tratar os efs e else..
Alguém realiza essa tarefa de forma mais elegante?
Lembrando que uso o bando de dados Mysql
Discussão (7)
Carregando comentários...