Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

[Semantical Error] The annotation "@Entity" in class Alura\Doctrine\Entity\Aluno was never imported. Did you maybe forget to add a "use" statement for this annotation?

Estou com um erro na parte de 'não encontrar as Annotations do meu código', mas eu informe elas corretamente, sendo que o código anterior rodou normalmente. Meu código:

<?php

namespace Alura\Doctrine\Entity;

/**
 * @Entity
 */
class Aluno
{


    /**
     * @Id
     * @GeneratedValue
     * @Column(type="integer")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private string $nome;

    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;
    }
}

cli.config.php

<?php

use Alura\Doctrine\Helper\EntityManagerFactory;
use Doctrine\ORM\Tools\Console\ConsoleRunner;

require_once __DIR__ . '/vendor/autoload.php';

$entityManagerFactory = new EntityManagerFactory();
$entityManager = $entityManagerFactory->getEntityManager();

return ConsoleRunner::createHelperSet($entityManager);
5 respostas
solução!

Resolvido, tive que colocar todos os use que eu tenho que usar, não sei o pq me pediu para colocar isso sendo que eu já tinha declarado no meu Annotation...

ficou assim:

<?php

namespace Alura\Doctrine\Entity;

use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Column;

/** @Entity */
class Aluno
{

    /**
     * @id
     * @GeneratedValue
     * @Column(type="integer")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private $nome;

    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;
    }
}

Se alguém souber o pq pediu para colocar os use mesmo sendo declarado as Annotation eu ficarei totalmente agradecido.

Quando você criou a classe EntityManagerFactory, você deu um use na classe use Doctrine\ORM\Tools\ Setup ou na classe use Doctrine\ORM\ ORMSetup ?

Eu tive que fazer o mesmo processo que vc por ter utilizado ORMSetup, depois testei utilizando a classe Setup sem os use das:

use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Column;

e continuou funcionando normalmente, creio que o "problema" seja aí, na forma que as duas classes leem as "annotations".

Utilizei o ORMSetup pois no Doctrine estava dando erro na minha class Setup, não sei se foi por causa de alguma atualização ou algo do tipo.

Então foi por este motivo que vc precisou utilizar os use .

Em outro post eu comentei algo sobre a classe ORMSetup e o professor Vinicius, informou que já existe um novo curso sobre Doctrine que resolve essa questão, segue o link.

https://cursos.alura.com.br/course/doctrine-conhecendo-orm-php

Opa! Valeu Luan Miano, vou dar uma olhada no curso e logo praticar mais. Obrigado pela dúvida.