Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

[Dúvida] Como o objeto endereco pode pertender a classe escola?

Preciso cadastrar no banco de dados as informações da classe escola junto com os atributos endereco referente ao objeto escola. Por enquanto consigo tranquilamente salvar no mysql a informações da classe escola utilizando o método cadastrarEscola() , porém não estou conseguindo cadastrar as informações da classe endereço pois não sei como realizar. O objeto escola pertence a classe escola? Tenho os seguintes códigos:

<?php
//Classe Endereco

class Endereco{

    protected   $pais;
    protected  $estado;
    protected  $cidade;
    protected  $bairro;
    protected  $logradouro;
    protected  $numero;
    protected  $complemento;

    //Método Construtor
    public function __construct($pais, $estado, $cidade, $bairro, $logradouro, $numero){

        $this->pais = $pais;
        $this->estado = $estado;
        $this->cidade = $cidade;
        $this->bairro = $bairro;
        $this->logradouro = $logradouro;
        $this->numero = $numero;

    }


    //Verificar Campo em banco ou vazio

    public function retornaEndereco(){
        return $endereco;
    }

    //Retornar Bairro
    public function retornarBairro(){
        return $this->bairro;
    }

    //Get
    public function setBairro($bairro){
        $this->bairro = $bairro;
    }


}

E:

<?php
//Classe Escola

class Escola{

    //Atributos
    private string $CD_INEP;
    private string $nomeEscola;
    private string $emailEscola;
    private string $telefoneEscola;
    private $enderecoEscola;

    //Método construtor
    public function __construct(string $CD_INEP, string $nomeEscola, string $emailEscola, string $telefoneEscola, $enderecoEscola){

        $this->CD_INEP = $CD_INEP;
        $this->nomeEscola = $nomeEscola;
        $this->emailEscola = $emailEscola;
        $this->telefoneEscola = $telefoneEscola;
        $this->enderecoEscola = $enderecoEscola;
    }

    //Cadastrar Escola no Banco de dados
    public function cadastrarEscola(){
        global $pdo;

        $sql = "INSERT INTO `escolas`(`CD_INEP`, `nomeEscola`, `emailEscola`, `telefoneEscola`) 

        VALUES ('$this->CD_INEP', '$this->nomeEscola', '$this->emailEscola', '$this->telefoneEscola')";

        $cadastro = $pdo->exec($sql);

        if($cadastro){
            echo "Escola cadastrad com sucesso!";
        }
        else{
            echo "Não foi possível cadastrar.";
        }

    }


}
2 respostas

Olá Welton, tudo bem?

Você pode fazer algo assim:

public function cadastrarEscola(){
    global $pdo;

    $sql = "INSERT INTO `escolas`(`CD_INEP`, `nomeEscola`, `emailEscola`, `telefoneEscola`) 

    VALUES ('$this->CD_INEP', '$this->nomeEscola', '$this->emailEscola', '$this->telefoneEscola')";

    $cadastro = $pdo->exec($sql);

    // Adicionando endereço
    if ($cadastro) {
        $idEndereco = $pdo->lastInsertId();
        $pais = $this->enderecoEscola->pais;
        $estado = $this->enderecoEscola->estado;
        $cidade = $this->enderecoEscola->cidade;
        $bairro = $this->enderecoEscola->bairro;
        $logradouro = $this->enderecoEscola->logradouro;
        $numero = $this->enderecoEscola->numero;
        $complemento = $this->enderecoEscola->complemento;
        $sqlEndereco = "INSERT INTO `enderecos` (`idEscola`, `pais`, `estado`, `cidade`, `bairro`, `logradouro`, `numero`, `complemento`)
                        VALUES ('$idEndereco', '$pais', '$estado', '$cidade', '$bairro', '$logradouro', '$numero', '$complemento')";
        $cadastroEndereco = $pdo->exec($sqlEndereco);
        if ($cadastroEndereco) {
            echo "Endereço cadastrado com sucesso!";
        } else {
            echo "Não foi possível cadastrar o endereço.";
        }
    } else {
        echo "Não foi possível cadastrar.";
    }
}

A minha dúvida é como acessar diretamente os valores dos atritubos do objeto Endereco, sendo que Endereco é um atributo do objeto escola.

Instanciei os seguintes objetos:

$endereco = new Endereco("BRASIL", "$UF_Escola", "$municipioEscola", "$bairroEscola", "$enderecoEscola", "$numeroEnderecoEscola");

$novaEscola = new Escola("$CD_INEP", "$nomeEscola", "$emailEscola", "$telefoneEscola", **$endereco**);

O objeto endereco é um atributo de novaEscola. Como acesso diretamente os atributos de endereco diretamente do objeto novaEscola?

Tentei o seguinte código que não funciona: $novaEscola->endereco->pais

Existe algum outra maneira?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade