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

Erro ao rodar comando "vendor/bin/doctrine orm:info"

Boa tarde,

Ao rodar o comando "vendor/bin/doctrine orm:info" após todas configurações das classes Telefone e Aluno é retornada a seguinte mensagem:

Found 2 mapped entities:


In AnnotationException.php line 69:

  [Creation Error] The annotation @ManyToOne declared on property Alura\Doctrine\Entity\Telefone::$aluno does not have a property named "mappedBy". Available properties: targetEntity, cascad  
  e, fetch, inversedBy                                                                                                                                                                          


orm:info

Classe Telefone:

<?php

namespace Alura\Doctrine\Entity;

/**
* @Entity
*/

class Telefone
{
    /**
    * @id
    * @GenerateValue
    * @Column(type="integer")
    */
    private $id;
    /**
    * @Column(type="string")
    */
    private $numero;
    /**
    * @ManyToOne(targetEntity="Aluno", mappedBy="aluno")
    */
    private $aluno;

    public function getId(): int
    {
           return $this->id;
       }

       public function setId(int $id): self
       {
          $this->id = $id;
          return $this;
     }

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

Classe Aluno:

<?php

namespace Alura\Doctrine\Entity;

/**
* @Entity
*/
class Aluno
{
    /**
    * @Id
    * @GeneratedValue
    * @Column(type="integer")
    */
    private $id;
    /**
    * @Column(type="string")
    */
    private $nome;
    /**
    * @OneToMany(targetEntity="Telefone")
    */
    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;
    }

    public function addTelefone(Telefone $telefone)
    {
           $this->telefones->add($telefone);
           $telefone->setAluno($this);
           return $this;
       }

       public function getTelefones(): Collection
       {
           return $this->telefones;
       }

}
2 respostas
solução!

Fala, Anderson! Beleza?

Você está implementando a relação da forma errada, diferente do que foi explicado no vídeo. A propriedade mappedBy só pode ser utilizada na anotação @OneToMany. Nela você informa que lá do outro lado da relação, existe este mapeamento também.

Na anotação @ManyToOne nós não precisamos (nem podemos informá-la). Caso você queira, pode informar a propriedade inversedBy.

;-)

Então, basicamente, mova o mappedBy da classe Telefone para a classe Aluno.

Obrigado, Vinicius,

Agora funcionou.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software