Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Relacionamento

Bom dia como eu faço para através de relacionamento de tabelas para acessar informação que está em uma terceira tabela? Seria isso que eu queria fazer: tenho uma tabela caso, que por sua vez tem um relacionamento com a tabela pessoa que por sua vez tem um relacionamento com a a tabela titulo. (um caso tem um perfil_id que por sua vez tem um titulo_id. O id do título consigo exibir mas não consigo trazer e exibir o nome referente ao titulo

$caso()->getPerfil()->getTitulo_nome()

Banco Caso

function listaCasos()
{
$casos = array();
$resultado = mysqli_query($this->conexao,  "select c.*, p.nome as perfil_nome ,
p.oab as perfil_oab, p.uf_oab_id as perfil_uf_oab_id, p.titulo_id as perfil_titulo_id,
pe.nome as pessoa_nome, re.nome as resolucao_nome, 
ho.valor as honorarios_valor, pg.nome as forma_pagamento_nome
from caso c
left join perfil p on(c.perfil_id = p.id)
left join pessoa pe on(c.pessoa_id = pe.id) 
left join resolucao re on(c.resolucao_id = re.id)
left join honorarios ho on(c.honorarios_id = ho.id)
left join forma_pagamento pg on(c.forma_pagamento_id = pg.id)");

while($array = mysqli_fetch_assoc($resultado)) {

    $caso = new Caso();
    $caso->setId( $array['id'] );
    $caso->setNumero( $array['numero'] );
    $caso->setPerfil( new perfil() );
    $caso->getPerfil()->setId( $array['perfil_id'] );
    $caso->getPerfil()->setNome( $array['perfil_nome'] );
    $caso->getPerfil()->setOab( $array['perfil_oab'] );
    $caso->getPerfil()->setUf_oab( $array['perfil_uf_oab_id']);
    $caso->getPerfil()->setTitulo( $array['perfil_titulo_id']);
    $caso->setResumo( $array['resumo'] );
    $caso->setPessoa( new Pessoa() );
    $caso->getPessoa()->setId( $array['pessoa_id'] );
    $caso->getPessoa()->setNome( $array['pessoa_nome'] );
    $caso->setData_atendimento( $array['data_atendimento'] );
    $caso->setNatureza( $array['natureza'] );
    $caso->setResolucao( new Resolucao() );
    $caso->getResolucao()->setId( $array['resolucao_id'] );
    $caso->getResolucao()->setNome( $array['resolucao_nome'] );
    $caso->setHonorarios( new Honorarios() );
    $caso->getHonorarios()->setId( $array['honorarios_id'] );
    $caso->getHonorarios()->setValor( $array['honorarios_valor'] );
    $caso->setForma_pagamento( new Forma_pagamento() );
    $caso->getForma_pagamento()->setId( $array['forma_pagamento_id'] );
    $caso->getForma_pagamento()->setNome( $array['forma_pagamento_nome'] );

array_push($casos, $caso);

}
return $casos;
}

Banco Titulo

function listaTitulos($conexao)
{
$titulos = array();
$query = "select * from titulo";
$resultado = mysqli_query($conexao, $query);
while ($array= mysqli_fetch_assoc($resultado)) {

$titulo = new Titulo();
$titulo->id = $array['id'];
$titulo->nome = $array['nome'];
array_push($titulos, $titulo);
}
return $titulos;
}
2 respostas
solução!

Oi Sergio, tudo bom?

Se a propriedade titulo se referencia a uma tabela pelo id titulo_id, uma possibilidade é ter outro join relacionando essa tabela na query que lista os casos. Algo como:

left join titulo t on(t.id = p.titulo_id)

Dessa forma, é possivel resgatar o valor do nome diretamente na query também:

select ... p.titulo_id as perfil_titulo_id,t.nome as perfil_titulo_nome

E, pegar no PHP também:

$titulo = new Titulo();
$titulo->setId($array['perfil_titulo_id']);
$titulo->setId($array['perfil_titulo_nome']);
    $caso->getPerfil()->setTitulo( $titulo);

Abraço

Muito obrigado André funcionou! Show! valeu mesmo!