Opa Vinicius!
Parece que a classe Aluno não reconhece o que é um ArrayCollection. O código só apresentou estes problemas ao relacionar
as entidades Aluno e Telefone.
<?php
namespace Alura\Doctrine\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use mysql_xdevapi\Collection;
/**
* @Entity
*/
class Aluno
{
/**
* @Id
* @GeneratedValue
* @Column(type="integer")
*/
private $id;
/**
* @Column(type="string")
*/
private $nome;
//Trata-se de uma coleção de dados. No doctrine usamos Collection
//Doctrine além de ORM fornece biblioteca de coleçoes, com muitos metodos para manipulação, semelhante ao array
//Relação 1 to N. Um aluno pode ser mapeado para varios telefones
/**
* @OneToMany(targetEntity="Telefone", mappedBy="Aluno", cascade="remove", {"persist"})
*/
private $telefones;
public function __construct()
{
$this->telefones = new ArrayCollection();
}
public function getId(): int
{
return $this->id;
}
public function getNome(): string
{
return $this->nome;
}
public function setNome(string $nome): self
{
$this->nome = $nome;
return $this;
}
//Recebe telefone da instancia Telefone...esse tel recebido no param ja vem c informacao do dono(aluno)
public function addTelefones(Telefone $telefone)
{
$this->telefones->add($telefone);
$telefone->setAluno($this);
return $this;
}
//A recuperação dos telefones não é um array, mas uma string. No processo de persistencia no banco vira string(implode)
public function getTelefones (): ArrayCollection
{
return $this->telefones;
}
}
No prompt aparece este erro ao buscar um aluno:
C:\Users\6595197\Documents\Programacao\php-alura\doctrine>php commands\buscar-alunos.php
PHP Fatal error: Uncaught TypeError: Return value of Alura\Doctrine\Entity\Aluno::getTelefones() must be an instance of Doctrine\Common\Collections\ArrayCollection, instance of Doctrine\ORM\PersistentCollection returned in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\src\Entity\Aluno.php:66
Stack trace:
#0 C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\buscar-alunos.php(21): Alura\Doctrine\Entity\Aluno->getTelefones()
#1 {main}
thrown in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\src\Entity\Aluno.php on line 66
No prompt ao criar um aluno:
`
C:\Users\6595197\Documents\Programacao\php-alura\doctrine>php commands\criar-aluno.php "Flavio Almeida" "(21) 2222 - 2222"
PHP Fatal error: Uncaught Error: Class 'Telefone' not found in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\criar-aluno.php:21
Stack trace:
#0 {main}
thrown in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\criar-aluno.php on line 21