Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvidas

Bom dia.

1) Não consegui entender ainda como que esses métodos feitos apenas em memória fazem persistir corretamente no banco o registro. Criamos um aluno e adicionamos telefones a ele com o método addPhone. E como que ao persistir o doctrine entende que ele tem que salvar o aluno com nome e id na tabela Aluno e os telefones adicionados para aluno ele tem que salvar na tabela Telefone com o id de Aluno. Estou confusa.

2) O professor disse que quando adiciono os telefones ele deixa de ser arrayCollection e passa a ser outra coleção do doctrine já armazenada no banco, então devido essa alteração automática na hora de persistir, essa propriedade não pode ser readonly, mas confesso que não compreendi ainda. E também não entendi quando colocar então uma propriedade como readonly ou não.

3) Quando fizemos esse código para mostrar os telefones dos alunos:

foreach ($alunosAscNome as $aluno) {
    echo $aluno->nome . PHP_EOL; 
    echo "\nTelefones:\n";
    foreach($aluno->getTelefones() as $telefone){
        echo $telefone->numero . PHP_EOL;
    }

    echo PHP_EOL;
}

Fiquei com a seguinte dúvida: Quando buscamos um Aluno tivemos que usar o find() e como para o telefone não? Eu não teria que informar algo para quando ele buscar o Aluno, ele buscar o telefone associado a ele? Como ele faz isso automático?

1 resposta
solução!

E como que ao persistir o doctrine entende que ele tem que salvar o aluno com nome e id na tabela Aluno e os telefones adicionados para aluno ele tem que salvar na tabela Telefone com o id de Aluno. Estou confusa.

Isso tudo foi definido no nosso mapeamento, Karolina. A tabela possui o mesmo nome da classe (mas vimos que podemos mudar isso com o #[Table]

essa propriedade não pode ser readonly, mas confesso que não compreendi ainda

O Doctrine, por baixo dos panos, vai alterar essa propriedade. O tipo vai ser outro, vai ser um objeto de uma classe que só o Doctrine precisa conhecer e manipular. Por isso nós usamos a interface. :-D

E também não entendi quando colocar então uma propriedade como readonly ou não.

Quando ela não for ser alterada nunca, pode ser readonly

Como ele faz isso automático?

O Doctrine já sabe como buscar os relacionamentos e inclusive vamos tratar no próximo treinamento de Doctrine sobre os problemas de performance dessa abordagem e como melhorar. :-D