Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Willian Rodrigues Andrade

consultas e Dependencias de Chave estrangeira em PHP

Recommended Posts

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi muito bem qual a sua intensão? quer passar uma informação entre os elementos...?

 

 

Class teste{
 function teste($vl)
{
echo $vl;
}
}


$obj = new teste("Valor para teste");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você olhar os links que te passei você verá que eles já fazem este trabalho.

Dê uma estudada no Doctrine.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.