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

Dúvida sobre relacionamentos

Olá Vinicius, ainda está meio complicado entender os relacionamentos no doctrine =(

O relacionamento que estamos fazendo entre Aluno e Telefone é unidirecional ou bidirecional? O mappedBy poderia ter sido usado na classe de Telefone? Para que serve o mappedBy afinal? É que fiz um teste sem ele e tudo funcionou corretamente. Está bem estranho =S

9 respostas

Caso tenha alguma boa referência para leitura eu agradeço, não gostei muito da documentação sobre essa parte de relacionamentos, queria algo que ajudasse a entender o que estou fazendo realmente.

solução!

Fala, Diego! Beleza?

Cara, essa parte de relacionamentos realmente é meio confusa, mas vou tentar simplificar:

No nosso caso o relacionamento é bidirecional, já que nós mapeamos o relacionamento tanto na classe Telefone quanto na classe Aluno. Consguimos acessar o Aluno através de uma instância de Telefone e conseguimos acessar os Telefones através de uma instância de Aluno.

Quando existe o relacionamento bidirecional, temos as propriedades mappedBy e inversedBy sendo definidas, como foi no nosso caso.

Basicamente é isso. A documentação sobre as diferenças entre os tipos de relacionamento é bem escassa: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/association-mapping.html#one-to-many-bidirectional

Espero ter ajudado. Abração, man!

Oi Vinicius, uma última dúvida em relação a isso:

Mesmo se eu não fizesse relacionamento bidirecional teria como eu fazer depois uma consulta personalizada para obter os alunos via telefone, correto? Geralmente em seus projetos você realiza relacionamentos unidirecionais, bidirecionais ou varia muito com o seu propósito?

Se o relacionamento não existir no mapeamento, a "consulta personalizada" não vai ser possível também.

A DQL do Doctrine se baseia no mapeamento pra montar o SQL.

Quanto a meus projetos, depende muito do que to mapeando. Não tem nenhuma regra específica não.

Parando pra pensar aqui, a maioria das relações que acabo mapeando são bidirecionais, mas não é uma regra...

Valeu Vinicius, muito obrigado!

"Se o relacionamento não existir no mapeamento, a "consulta personalizada" não vai ser possível também."

No caso o relacionamento existe, porém é unidirecional, isso que eu quis dizer. Por exemplo, se você tivesse feito unidirecional entre Aluno e Telefones onde só os Alunos conhecessem seus telefones. Na verdade nem sei se faz muito sentindo o que estou perguntando, melhor deixar quieto rsrs.

Valeu

Então, Diego, se você só mapeou em Aluno, não tem como chegar nos alunos a partir de seus telefones, já que na classe Telefone não teria nenhuma forma de encontrar o Aluno, entende?

O Doctrine não vai saber como fazer isso através de DQL. Você poderia, claro, chegar nesse resultado escrevendo o SQL na mão.

Entendi perfeitamente agora, valeu Vinicius!