Gostaria de entender por que foi feito o relacionamento Bidirecional? Eu sempre criei relacionamento Unidirecional. E outra duvida é por que não foi preciso criar uma classe Entity para curso-aluno?
Gostaria de entender por que foi feito o relacionamento Bidirecional? Eu sempre criei relacionamento Unidirecional. E outra duvida é por que não foi preciso criar uma classe Entity para curso-aluno?
Olá, Thiago.
Se eu não entendi errado sua pergunta, creio que o motivo do relacionamento bidirecional é que tanto a entidade (tabela) Aluno quanto Curso se vinculam quando o Doctrine, por conta própria, cria a tabela de referência aluno-curso (ou curso-aluno) através das instruções contidas no mapeamento que fizemos em cada entidade (Aluno e Curso), com as annotations.
Aguardo confirmação de algum instrutor para validar minha resposta.
Fala Kleverson. Na verdade é o seguinte: quando trabalhei com hibernate eu criava a tabela de relação aluno_curso e criava a classe aluno_curso pra ser minha Entity. Ela tinha a referencia do Id do curso e do aluno. A classe Aluno (Entity) não tinha nada nela referenciando a classe e Curso (Entity) e nem o inverso. Ai quando para salvar um curso_aluno instanciava a classe e trabalhava com este objeto. Ex: getDAO().salvar(curso_aluno);
Então seja questão de diferentes formas de abstração entre os ORM. Com o hibernate (pesquisei aqui pra saber o que era! rsrs) você já criava a tabela-referência de antemão (é o caso? Não conheço o hybernate e este é meu primeiro curso de ORM) e com o Doctrine esta relação é exposta através das annotations, que gera a tabela-referência, demandando a relação bidirecional para tanto.
Você acha que é mais simples a forma que é aplicada no hybernate?
Não é questão de ser mais simples, ate por que as duas formas são simples. Na verdade a questão é entender se eu poderia fazer como fazia no hibernate e se nesse formato da aula é uma forma mais adequada no que se diz respeito à performace e boa pratica?
Entendi. Então eu também vou aguardar alguém responder adequadamente, à sua pergunta. De qualquer forma acho que essa parte da documentação do Doctrine possa lhe esclarecer algo. É sobre associações entre entidades e ele demonstra exemplos unidirecionais e bidirecionais.
Opa, Thiago. Pras 2 perguntas:
Gostaria de entender por que foi feito o relacionamento Bidirecional
Pra me permitir acessar o aluno através do curso e o curso através do aluno. Se eu precisasse de acesso através de apenas uma das 2, seria unidirecional.
por que não foi preciso criar uma classe Entity para curso-aluno?
Porque isso não faria o menor sentido. curso_aluno
ou aluno_curso
é um detalhe de implementação do mecanismo de persistência. Isso não faz parte do domínio, logo, não deve estar modelado no meu código que é orientado a objetos. ;-)
Você pode configurar essa tabela com as anotações, ou como vamos fazer em cursos mais pra frente, em XML. Mas criar a entidade em si, foge completamente do paradigma de programação orienta a objetos.