0
respostas

PHPStorm não reconhece funções getCursos() e getAlunos()

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:Insira aqui a descrição dessa imagem para ajudar na acessibilidade