Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Vamos supor o seguinte caso.
Você precisa inserir dados na tabela cliente e ela tem dependencia de 2 outras entidades.
Qual seria a melhor forma de fazer isso em php.
As tabelas independentes deve ter os dados inseridos previamente e no meu caso eu fiz uma consulta para obter os ids, e quando estiver com os ids em uma variável eu faço a inserção.
Porém não achei isso tão elegante.
As tabelas são essas.
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE SCHEMA IF NOT EXISTS `cliente` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `cliente` ;
-- -----------------------------------------------------
-- Table cliente.Endereco
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cliente`.`Endereco` (
`idEndereco` INT NOT NULL AUTO_INCREMENT ,
`pais` VARCHAR(100) NOT NULL ,
`estado` VARCHAR(100) NOT NULL ,
`cidade` VARCHAR(100) NOT NULL ,
`logradouro` VARCHAR(100) NOT NULL ,
`cep` VARCHAR(20) NOT NULL ,
`numero` VARCHAR(5) NOT NULL ,
PRIMARY KEY (`idEndereco`) ,
UNIQUE INDEX `idEndereco_UNIQUE` (`idEndereco` ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cliente.PessoaCliente
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cliente`.`PessoaCliente` (
`idPessoaCliente` INT NOT NULL AUTO_INCREMENT ,
`cpf` VARCHAR(15) NOT NULL ,
`rg` VARCHAR(20) NOT NULL ,
PRIMARY KEY (`idPessoaCliente`) ,
UNIQUE INDEX `cpf_UNIQUE` (`cpf` ASC) ,
UNIQUE INDEX `rg_UNIQUE` (`rg` ASC) ,
UNIQUE INDEX `idPessoa_UNIQUE` (`idPessoaCliente` ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cliente.Cliente
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cliente`.`Cliente` (
`idCliente` INT NOT NULL AUTO_INCREMENT ,
`nome` VARCHAR(60) NOT NULL ,
`email` VARCHAR(60) NOT NULL ,
`Endereco_idEndereco` INT NOT NULL ,
`PessoaCliente_idPessoaCliente` INT NOT NULL ,
`Senha` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`idCliente`) ,
UNIQUE INDEX `idCliente_UNIQUE` (`idCliente` ASC) ,
UNIQUE INDEX `email_UNIQUE` (`email` ASC) ,
INDEX `fk_Cliente_Endereco1_idx` (`Endereco_idEndereco` ASC) ,
INDEX `fk_Cliente_PessoaCliente1_idx` (`PessoaCliente_idPessoaCliente` ASC) ,
CONSTRAINT `fk_Cliente_Endereco1`
FOREIGN KEY (`Endereco_idEndereco` )
REFERENCES `cliente`.`Endereco` (`idEndereco` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Cliente_PessoaCliente1`
FOREIGN KEY (`PessoaCliente_idPessoaCliente` )
REFERENCES `cliente`.`PessoaCliente` (`idPessoaCliente` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cliente.TelefoneCliente
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cliente`.`TelefoneCliente` (
`idTelefoneCliente` INT NOT NULL AUTO_INCREMENT ,
`tipo` VARCHAR(45) NOT NULL ,
`numero` VARCHAR(15) NOT NULL ,
`Cliente_idCliente` INT NULL ,
PRIMARY KEY (`idTelefoneCliente`, `Cliente_idCliente`) ,
UNIQUE INDEX `idTelefone_UNIQUE` (`idTelefoneCliente` ASC) ,
INDEX `fk_Telefone_Cliente1_idx` (`Cliente_idCliente` ASC) ,
CONSTRAINT `fk_Telefone_Cliente1`
FOREIGN KEY (`Cliente_idCliente` )
REFERENCES `cliente`.`Cliente` (`idCliente` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
USE `cliente` ;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Eu pensei em usar orientação a objetos mas tenho tido dificuldades.
Não consigo encontrar um geito de passar o $_POST entre métodos.
Talvez alguém me dê um exemplo de como fazé-lo.
Carregando comentários...