1
resposta

Como fazer quando a classe estrangeira tem mais de um atributo

Estou com duas classes uma Estudante e outra de Endereço, todo aluno tem um endereço_id que identifica todos os dados do seu endereço como faço para listar e para inserir estes dados?

estrutura do BD:

aluno (matricula, nome, nome_mae, nome_pai, data_nascimento, endereco_id, auditoria_usuario);

endereco (id, cep, rua, bairro, cidade, estado, complemento);

Classe estudante:

<?php

class Estudante{
    public $matricula;
    public $nome;
    public $nome_mae;
    public $nome_pai;
    public $data_nascimento;
    public $auditoria;
    public $endereco;
}
<?php

class Endereco{
    public $id;
    public $cep;
    public $rua;
    public $bairro;
    public $cidade;
    public $estado;
    public $complemento;
}

Estou fazendo assim o Lista, porem não esta funcionando.

function listaEstudantes($conexao){
    $estudantes = array();
    $query =  "select a.matricula, a.nome, a.nome_mae, a.nome_pai, a.data_nascimento, a.auditoria_usuario, 
                    e.cep, e.rua, e.bairro, e.cidade, e.estado, e.complemento 
          from aluno as a join endereco as e on e.id = a.endereco_id;";
    $resultado = mysqli_query($conexao, $query);
    while($estudante_array = mysqli_fetch_assoc($resultado)){
        $estudante = new Estudante();
        $endereco = new Endereco();

        $estudante->matricula = $estudante_array['matricula'];
        $estudante->nome = $estudante_array['nome'];
        $estudante->nome_mae = $estudante_array['nome_mae'];
        $estudante->nome_pai = $estudante_array['nome_pai'];
        $estudante->data_nascimento = $estudante_array['data_nascimento'];
        $estudante->auditoria = $estudante_array['auditoria_usuario'];
        $estudante->endereco->cep = $estudante_array['cep'];
        $estudante->endereco->rua = $estudante_array['rua'];
        $estudante->endereco->bairro = $estudante_array['bairro'];
        $estudante->endereco->cidade = $estudante_array['cidade'];
        $estudante->endereco->estado = $estudante_array['estado'];
        $estudante->endereco->complemento = $estudante_array['complemento'];


        array_push($estudantes, $estudante);
    }
    return $estudantes;

E assim o insere:

function insereEstudante($conexao, Estudante $estudante){
    $nome = mysqli_real_escape_string($conexao, $estudante->nome);
    $nome_mae = mysqli_real_escape_string($conexao, $estudante->nome_mae);
    $nome_pai = mysqli_real_escape_string($conexao, $estudante->nome_pai);
    $data_nascimento = mysqli_real_escape_string($conexao, $estudante->data_nascimento);

    $query = "insert into aluno (nome, nome_mae, nome_pai, data_nascimento, endereco_id, auditoria_usuario) values
              ('{$nome}', '{$nome_mae}', '{$nome_pai}', '{$data_nascimento}', '{$estudante->endereco}', '{$estudante->auditoria}' )";
    $resultadoDaInsercao = mysqli_query($conexao, $query);

    return $resultadoDaInsercao;
}
1 resposta

Olá, Adriel!

Acho que seu código está quase perfeito!

Uma coisa que vi, é que faltou você relacionar o novo objeto Endereco ao atributo do novo objeto Estudante.

$estudante = new Estudante();
$endereco = new Endereco();

//relacionando objetos
$estudante->endereco = $endereco;