Na aula 06 do curso de Doctrine, vídeo 02.
Nós executamos o relatorio-cursos-por-aluno.php para receber a listagem de alunos.
No entanto eu não consigo fazer isso, me retona um erro.
Ele entra num loop na hora de procurar o Telefone dos Alunos.
Já revisei tudo.
Por favor, me ajudem!
Aqui meu GIT com o código completo https://github.com/zwinglio/doctrine-alura
Aluno.php
<?php
namespace Alura\Doctrine\Entity;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @Entity
*/
class Aluno
{
/**
* @Id
* @GeneratedValue
* @Column(type="integer")
*/
private $id;
/**
* @Column(type="string")
*/
private $nome;
/**
* @OneToMany(targetEntity="Telefone", mappedBy="aluno", cascade={"remove", "persist"}), fetch="EAGER")
*/
private $telefones;
/**
* @ManyToMany(targetEntity="Curso", mappedBy="alunos")
*/
private $cursos;
public function __construct() {
$this->telefones = new ArrayCollection();
$this->cursos = new ArrayCollection();
}
public function getId(): int
{
return $this->id;
}
public function getNome(): string
{
return $this->nome;
}
public function setNome($nome)
{
$this->nome = $nome;
return $this;
}
public function addTelefone(Telefone $telefone)
{
$this->telefones->add($telefone);
$telefone->setAluno($this);
return $this;
}
public function getTelefones(): Collection
{
return $this->telefones;
}
public function addCurso(Curso $curso): self
{
if($this->cursos->contains($curso)){
return $this;
}
$this->cursos->add($curso);
$curso->addAluno($this);
return $this;
}
public function getCurso(): Collection
{
return $this->cursos;
}
}
Telefone.php
<?php
namespace Alura\Doctrine\Entity;
/**
* @Entity
*/
class Telefone
{
/**
* @Id
* @GeneratedValue
* @Column(type="integer")
*/
private $id;
/**
* @Column(type="string")
*/
private $numero;
/**
* @ManyToOne(targetEntity="Aluno")
*/
private $aluno;
public function getId(): int
{
return $this->id;
}
public function getNumero(): string
{
return $this->numero;
}
public function setNumero(string $numero): self
{
$this->numero = $numero;
return $this;
}
public function getAluno(): Aluno
{
return $this->aluno;
}
public function setAluno(Aluno $aluno): self
{
$this->aluno = $aluno;
return $this;
}
}
relatorio-curso-por-aluno.php
<?php
use Alura\Doctrine\Entity\Aluno;
use Alura\Doctrine\Entity\Telefone;
use Alura\Doctrine\Helper\EntityManagerFactory;
require_once __DIR__ . '/../vendor/autoload.php';
$entityManagerFactory = new EntityManagerFactory();
$entityManager = $entityManagerFactory->getEntityManager();
$alunosRepository = $entityManager->getRepository(Aluno::class);
$alunos = $alunosRepository->findAll();
var_dump($alunos);
exit();
foreach ($alunos as $aluno) {
$telefones = $aluno
->getTelefones()
->map(function(Telefone $telefone) {
return $telefone->getNumero();
})->toArray();
echo "ID: { $aluno->getId() }\n";
echo "Nome: { $aluno->getNome() }\n";
echo "Telefones: " .implode(', ', $telefones);
$cursos = $aluno->getCursos();
foreach ($cursos as $curso) {
echo "\tID Curso: { $curso->getId() }\n";
echo "\tNome do Curso: { $curso->getNome() \n}";
echo "\n";
}
echo "/n";
}