Meu PHP Storm não está reconhecendo as funções getCursos() e getAlunos().
As funções aparecem em amarelo, mas essas estão aparecendo em cinza. O PHP Storm aponta o problema como Unused element: 'getCursos', por exemplo.
Abaixo vou deixar como estão os códigos da classe Aluno, o arquivo relatorio-cursos-por-aluno.php e uma imagem de como está aparecendo para mim.
Tentei encontrar a solução no Stack Overflow e até apontam algumas, como ir no Invalidate Caches... , mas não funcionou. Talvez seja algum problema bobo, mas não consegui identificar ainda.
Quando inicio o arquivo relatorio-cursos-por-aluno.php, aponta o seguinte erro no terminal:
Fatal error: Uncaught Error: Call to a member function getCursos() on array in C:\Users\Lucas\PhpstormProjects\PHP - Doctrine\Commands\relatorio-cursos-por-aluno.php:29
Stack trace:
#0 {main}
thrown in C:\Users\Lucas\PhpstormProjects\PHP - Doctrine\Commands\relatorio-cursos-por-aluno.php on line 29
Código da classe Aluno:
<?php
namespace Alura\Doctrine\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
/**
* @Entity
*/
class Aluno
{
/**
* @Id
* @GeneratedValue
* @Column(type="integer")
*/
private $id;
/**
* @Column (type="string")
*/
private $nome;
/**
* @OneToMany(targetEntity="Telefone", mappedBy="aluno", cascade={"remove", "persist"})
*/
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) : self
{
$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;
}
/**
* @return Collection
*/
public function getCursos() : Collection
{
return $this->cursos;
}
}
Código do relatorio:
<?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);
/*** @var Aluno[] $alunos */
$alunos = $alunosRepository->findAll();
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) . "\n";
$cursos = $alunos->getCursos();
foreach ($cursos as $curso) {
echo "\t ID Curso : {$curso->getId()} \n";
echo "\t Curso: {$curso->getNome()} \n";
echo "\n";
}
echo "\n";
}
E uma imagem demonstrando: